[Frage] Listenansicht Exbase Erweiterung nach datum filtern

  • flierter flierter
    T3PO
    0 x
    9 Beiträge
    0 Hilfreiche Beiträge
    19. 08. 2015, 18:13

    hi ich bin dabei meine erste Erweiterung zu entwickeln und hab folgendes Problem.

    in meinem list.html möchte ich alle Event anzeigen die in der zufunkt liegen.

    -Events von heute sollen noch angezeigt werden
    -Event von gestern und älter sollen nicht angezeigt werden

    1. public function listAction() {
    2. $cals = $this->calRepository->findAll();
    3. $this->view->assign('cals', $cals);
    4. }

    mein Repository ist noch leer

    1. class CalRepository extends \TYPO3\CMS\Extbase\Persistence\Repository {
    2.  
    3. }

    Danke im Voraus

  • Hilfreichster Beitrag

  • harald1972 harald197...
    Sternenflotten-Admiral
    1 x
    198 Beiträge
    13 Hilfreiche Beiträge
    20. 08. 2015, 07:42 - Hilfreichster Beitrag

    Moin,

    zwar weiß ich nicht, wie dein Model/Cal aufgebaut ist, aber du hast mindestens zwei Möglichkeiten.

    1. Du gehst dein $cals Array in einer Schleife durch, vergleichst das Datum (Event?) jedes einzelnen (foreach) Cals mit dem heutigen und übergibst (assign) nur diejenigen, die den Aktualitäts-Test bestehen.

    2. Du schreibst dir in dein CalRepository eine Methode - sagen wir - findNewerThan()

    1. public function findNewerThan(DateTime $refdate){
    2. $query= $this->createQuery();
    3. $query->matching( $query->greaterThan( 'date', $refdate ) )
    4. return $query->execute();
    5. }

    Das war mal wieder "aus der Hüfte geschossen", also ungetestet, ohne Gewähr.
    a) Ich gehe hier davon aus, daß dein [b]Model/Cal[/b] eine Property namens [b]date[/b] hat.
    b) Statt findAll() müsstest du dann findNewerThan( time() ) aufrufen.
    c) Wenn es mit time() nicht hinhaut, musst du eventuell einen Tag vor oder zurück rechnen oder vielleicht auch nur Null Uhr des heutgen Tages als $refdate nehmen.
    d) Mit der Methode kannst du dann aber auch jeden beliebigen Tag/Uhrzeit zum Vergleich heranziehen.

    Viel Glück!


  • 1
  • harald1972 harald197...
    Sternenflotten-Admiral
    1 x
    198 Beiträge
    13 Hilfreiche Beiträge
    20. 08. 2015, 07:42

    Moin,

    zwar weiß ich nicht, wie dein Model/Cal aufgebaut ist, aber du hast mindestens zwei Möglichkeiten.

    1. Du gehst dein $cals Array in einer Schleife durch, vergleichst das Datum (Event?) jedes einzelnen (foreach) Cals mit dem heutigen und übergibst (assign) nur diejenigen, die den Aktualitäts-Test bestehen.

    2. Du schreibst dir in dein CalRepository eine Methode - sagen wir - findNewerThan()

    1. public function findNewerThan(DateTime $refdate){
    2. $query= $this->createQuery();
    3. $query->matching( $query->greaterThan( 'date', $refdate ) )
    4. return $query->execute();
    5. }

    Das war mal wieder "aus der Hüfte geschossen", also ungetestet, ohne Gewähr.
    a) Ich gehe hier davon aus, daß dein [b]Model/Cal[/b] eine Property namens [b]date[/b] hat.
    b) Statt findAll() müsstest du dann findNewerThan( time() ) aufrufen.
    c) Wenn es mit time() nicht hinhaut, musst du eventuell einen Tag vor oder zurück rechnen oder vielleicht auch nur Null Uhr des heutgen Tages als $refdate nehmen.
    d) Mit der Methode kannst du dann aber auch jeden beliebigen Tag/Uhrzeit zum Vergleich heranziehen.

    Viel Glück!

  • flierter flierter
    T3PO
    0 x
    9 Beiträge
    0 Hilfreiche Beiträge
    20. 08. 2015, 10:34

    hi,
    vielen dank für die ausführliche Erklärung. Das war die Lösung für meinem Problem.
    ich musste wie du das geschrieben hast time()- 86400 verwenden sonst werden die Events von dem heutigen tag nicht angezeigt.

    Schöne Gruße

    flierter

  • 1