[Frage] Datumsfilter ergänzen TYPO3-Version: 6.2.7

  • McGregor McGregor
    Jedi-Ratsmitglied
    0 x
    610 Beiträge
    0 Hilfreiche Beiträge
    27. 01. 2016, 16:12

    Hi!

    Ich setze die 7.6.1 ein und versuche gerade einen Filter in der Listenansicht zu integrieren.
    Das scheint mir ein unlösbares Problem zu sein.
    Die Anforderung scheint mir dagegen relativ einfach.
    Ich hätte gerne 2 Dropdownboxen mit einmal dem Jahr und einmal dem Monat, um die Listenansicht zu filtern.
    Gibt es da nicht vielleicht was von ratioph... Nein Spaß. Irgendeine Extension, die das schon umsetzt?
    Oder vielleicht ein Workaround, um meine Anforderung umzusetzen?

    Mittlerweile bereue ich auch den Umstieg auf 7.x (ich will mein altes 4.x wieder haben ...)

    Grüße
    Jens


  • 1
  • McGregor McGregor
    Jedi-Ratsmitglied
    0 x
    610 Beiträge
    0 Hilfreiche Beiträge
    01. 02. 2016, 11:55

    So... Einfach mal im Code rumgesucht und ein paar Funktionen gefunden, die helfen.

    Die List.html habe ich um ein Filterfeld ergänzt.

    1. <div class="news_list_filter">
    2. Filter:
    3. <form method="get">
    4. <select name="year">
    5. <f:for each="{filter.jahre}" as="jahr" key="key" iteration="iterator">
    6. <option value="{jahr}"<f:if condition="{0:key}=={0:filter.akt_year}"> selected</f:if>>{jahr}</option>
    7. </f:for>
    8. </select>
    9. <select name="month">
    10. <f:for each="{filter.monate}" key="key" as="monat" iteration="iterator">
    11. <option value="{key}"<f:if condition="{0:key}=={0:filter.akt_month}"> selected</f:if>>{monat}</option>
    12. </f:for>
    13. </select>
    14. <input type="hidden" name="no_cache" value="1" />
    15. <input type="submit" value="filtern" />
    16. </form>
    17. </div>

    Dann noch im Repository (NewsRepository.php) eine Funktion ergänzt, die mir alle Jahre liefert, die in meinen News vorhanden ist:

    1. /**
    2.  * Returns a list of all years available
    3.  *
    4.  * @return mixed liste
    5.  */
    6. public function getYearList() {
    7. $query = 'SELECT DISTINCT DATE_FORMAT(FROM_UNIXTIME(`datetime`),"%Y") AS BLA FROM tx_news_domain_model_news ORDER BY `datetime`';
    8. $res = $GLOBALS['TYPO3_DB']->sql_query($query);
    9. $jahre = array(''); // leerer Eintrag
    10. while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
    11. $jahre[$row['BLA']] = $row['BLA'];
    12. }
    13. $GLOBALS['TYPO3_DB']->sql_free_result($res);
    14. return $jahre;
    15. }

    Und eine bestenden Funktion (listAction) im NewsController.php angepasst:

    1. /* INSERT BEFORE newsRecords = ... */
    2. if (isset($_GET['year'])) {
    3. $demand->setYear($_GET['year']);
    4. $demand->setMonth($_GET['month']);
    5. $filter['akt_month'] = $_GET['month'];
    6. $filter['akt_year'] = $_GET['year'];
    7. }
    8.  
    9. /* at End of Function */
    10. // finde alle passenden Jahre ...
    11. $filter['jahre'] = $this->newsRepository->getYearList();
    12. $filter['monate'] = array(
    13. 1 => 'Januar',
    14. 2 => 'Februar',
    15. 3 => 'März',
    16. 4 => 'April',
    17. 5 => 'Mai',
    18. 6 => 'Juni',
    19. 7 => 'Juli',
    20. 8 => 'August',
    21. 9 => 'September',
    22. 10 => 'Oktober',
    23. 11 => 'November',
    24. 12 => 'Dezember'
    25. );
    26. $this->view->assign('filter', $filter);

    Das ist sicher nicht die eleganteste Lösung und ich bekomme wohl Schwierigkeiten beim Update/Upgrade aber eine andere Lösung habe ich jetzt erstmal nicht gefunden.

    Grüße
    Jens

  • 1