Controller, Model, View verwenden

Wir wollen eine Projektliste ausgeben. Jedes Projekt hat Eigenschaften wie Titel, Beschreibung, Erledigen bis, erledigt, etc.

Dabei möchten wir anhand der “Erledigen bis” Eigenschaft zwei verschiedene Listen ausgeben.
1. Liste: Alle Projekte, welche bis Morgen erledigt sein müssen.
2. Liste: Alle Projekte, welche nicht erledigt / vergessen wurden.

Voraussetzung bis hier ist, dass du schon eine Extension mit dem Extension Builder erstellt hast.
=> Extbase Extension erstellen

Öffne das Repository für Projekte unter
Extension\Classes\Domain\Repository\ProjectRepository.php

Was kann mein Repository bereits?

Das ProjectRepository kann bereits alle vorhandenen Projekte mittels der Methode findAll() auslesen. Diese Methode braucht keine Parameter. Die findAll()-Methode wird von dem Extbase Repository unter \TYPO3\CMS\Extbase\Persistence\Repository vererbt.

Mittels findAllByDone(true) bzw. findAllByDone(false) könnten wir beispielsweise alle Projekte auslesen, welche erledigt bzw. noch offen sind. Dafür müssen wir keine eigenen Methoden anlegen. Diese stehen anhand unseren Eigenschaften in der ProjectModel bereits bereit.

Weitere Methoden, auf welche du bereits zugreifen kannst findest du unter: http://www.extbasefluid.com/extbase/Repository-Methoden/

Wir möchten aber alle Projekte bis zu einem bestimmten Datum auslesen.

Hierfür brauchen wir eine neue Methode. Erstelle eine neue Methode, welche alle Projekte ausliest. Zudem soll es mit einem „Erledigen bis“-Parameter möglich sein, die Abfrage einzugrenzen. Du darfst die Methode nennen, wie du möchtest. Ich schreibe immer findAll bzw. findAllBy davor, wenn ich Datensätze auslesen möchte. Das ist aber dir überlassen.

/**
 * The repository for Projects
 */
class ProjectRepository extends \TYPO3\CMS\Extbase\Persistence\Repository {
/*
* @param int $duedate
* @return void
*/
public function findAllTillDuedate(int $duedate) {
  $query = $this->createQuery();
  return $query->matching(
    $query->logicalAnd(
      $query->equals('done', false), /* Wir möchten nur offene Projekte */
      $query->lessThan('duedate', $duedate),
    )
  )->execute()->toArray();
}

Im Projekt Controller unter
Extension\Classes\Controller\ProjectController.php
können wir auf die neue Methode zugreifen.

Öffne die Projekt Controller Datei und greife auf die Methode zu. Diese übergibst du per Assign dem Fluid Template.

<?php
class Tx_MeineExtension_Controller_ProjectController extends Tx_Extbase_MVC_Controller_ActionController {
    /**
     * The project repository
     * @var Tx_MeineExtension_Domain_Repository_projectRepository
     */
    protected $projectRepository = NULL;

    public function listAction() {
        $projectsTillTomorrow = $this->dataRepository->findAllTillDuedate(strtotime("tomorrow"));
        $projectsForgotten = $this->dataRepository->findAllTillDuedate(strtotime("yesterday"));
        $this->view->assign('projectsTillTomorrow', $projectsTillTomorrow );
        $this->view->assign('projectsForgotten', $projectsForgotten );
    }
}

Öffne die Template Datei für die listAction()-Methode unter Extension\Resources\Private\Templates\Project\List.html.
In der Fluid-Template List.html Datei können wir jetzt auf die zwei Variablen zugreifen und ausgeben.

<h2><f:translate key="label_projects_till_tomorrow">Projekte bis Morgen</f:translate></h2>
<ul>
<f:for each="{projectsTillTomorrow}" as="oProject">
<li>{oProject.title}</li>
</f:for>
</ul>

<h2><f:translate key="label_projects_till_yesterday">Vergessene Projekte</f:translate></h2>
<ul>
<f:for each="{projectsForgotten}" as="oProject">
<li>{oProject.title}</li>
</f:for>
</ul>

Hast du einen Schritt nicht verstanden? Brauchst du Hilfe bei deinem Problem? Sende mir deine Anfrage an http://www.extbasefluid.com/anfrage. Aufgrund vieler Anfragen kann es bis zu einem Monat für eine Rückmeldung dauern.

Hast du einen Fehler gefunden? Schreibe an: http://www.extbasefluid.com/anfrage/
comments powered by Disqus