[Frage] Content alphabetisch sortiert ausgeben TYPO3-Version: 6.2.4

  • morange morange
    T3PO
    0 x
    25 Beiträge
    0 Hilfreiche Beiträge
    21. 09. 2015, 18:09

    Hallo,
    kann mir jemand sagen wie ich Inhalte im FE, in einer mit dem Extension Builder erstellten Extension die Inhalte nach einem Namensfeld alphabetisch sortieren kann?

    Bitte erklärt es etwas genauer, ist mein erstes Typo3 Projekt.

    Vielen Dank für eure Hilfe
    m.orange


  • 1
  • McGregor McGregor
    Jedi-Ratsmitglied
    0 x
    610 Beiträge
    0 Hilfreiche Beiträge
    23. 09. 2015, 12:34

    Hi!

    Da ist die Frage, welche Version Du benutzt. Bei mir (6.2) sieht das folgendermaßen aus:

    1. public function datensaetze($region) {
    2. $q = $this->createQuery();
    3. $q->getQuerySettings()->setRespectStoragePage(FALSE);
    4. return
    5. $q->matching($q->equals('region',$region))
    6. ->setOrderings(Array(
    7. 'sorting' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_DESCENDING
    8. ))->execute();
    9. }

    Ich suche hier alle Einträge einer Region und sortiere sie nach dem Feld "sorting". Da kannst Du aber auch andere Felder benutzen.

    Das ganze steht im Repository als Funktion und wird über den Controller aufgerufen und dem View zugwiesen.

    Controller:

    1. $this->view->assign('ausgabearray', $this->meinRepository->datensaetze($this->settings['region']));

    Die Region kommt in diesem Fall aus einem FlexForm-Feld des Plugins

    Grüße

  • morange morange
    T3PO
    0 x
    25 Beiträge
    0 Hilfreiche Beiträge
    20. 10. 2015, 10:40

    Hi McGregor,

    sorry das ich mich so spät melde.

    Ich nutze die 6.2.13 auf nem aktuellen Mac System – sollte also recht ähnlich sein zu deiner.

    Wenn ich das richtig sehe, fügst du diese Funktion in "meineExtension"/Classes/Controller/ hier in den Extension Controller ein.

    Bei mir steht da aktuell drin:

    1. <?php
    2.  
    3. namespace TxOfficestaff\KeyOfficestaff\Controller;
    4.  
    5. /**
    6.  * OfficestaffController
    7.  */
    8. class OfficestaffController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController {
    9.  
    10. /**
    11.   * officestaffRepository
    12.   *
    13.   * @var \TxOfficestaff\KeyOfficestaff\Domain\Repository\OfficestaffRepository
    14.   * @inject
    15.   */
    16. protected $officestaffRepository = NULL;
    17.  
    18.  
    19.  
    20. /**
    21.   * action list
    22.   *
    23.   * @return void
    24.   */
    25. public function listAction() {
    26. $officestaffs = $this->officestaffRepository->findAll();
    27. $this->view->assign('officestaffs', $officestaffs);
    28. }
    29.  
    30. /**
    31.   * action show
    32.   *
    33.   * @param \TxOfficestaff\KeyOfficestaff\Domain\Model\Officestaff $officestaff
    34.   * @return void
    35.   */
    36. public function showAction(\TxOfficestaff\KeyOfficestaff\Domain\Model\Officestaff $officestaff) {
    37. $this->view->assign('officestaff', $officestaff);
    38. }
    39.  
    40. /**
    41.   * action
    42.   *
    43.   * @return void
    44.   */
    45. public function Action() {
    46.  
    47. }
    48.  
    49. }

    Deine Funktion hab ich da jetzt unten angefügt und so angepasst:

    1. public function datensaetze($name) {
    2. $q = $this->createQuery();
    3. $q->getQuerySettings()->setRespectStoragePage(FALSE);
    4. return
    5. $q->matching($q->equals('name', $name))->setOrderings(Array ('sorting' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_DESCENDING))->execute();
    6. }

    und den Aufruf dieser in die Funktion public function listAction() gelegt.

    1. $this->view->assign('officestaffs', $this->officestaffRepository->datensaetze($this->settings['name']));

    Jedoch bringt mir dies die Typo3 Fehlerseite. Wenn ich Typo3 richtig verstehe, ist das Array leer.

    1. TYPO3\CMS\Extbase\Persistence\Repository::__call("datensaetze", array)
    2. TxOfficestaff\KeyOfficestaff\Domain\Repository\OfficestaffRepository::datensaetze(NULL)

    Diese beiden Fehlermeldungen verweisen beiden auf diese Zeile:

    1. $this->view->assign('officestaffs', $this->officestaffRepository->datensaetze($this->settings['name']));

    Kannst du mir sagen, wo der Fehler liegt?

    Besten Dank
    M.Orange

  • morange morange
    T3PO
    0 x
    25 Beiträge
    0 Hilfreiche Beiträge
    20. 10. 2015, 14:14

    Hallo McGregor,

    also in welche Dateien die Schnipsel müssen habe ich jetzt. :) Allerdings werden mir aus der DB die Datensätze geholt bei denen der Name NULL ist. Wie kann ich das denn ändern?

    Die Abfrage an die DB sieht dann so aus:

    1. SELECT tx_keyofficestaff_domain_model_officestaff.*
    2. FROM tx_keyofficestaff_domain_model_officestaff
    3. WHERE tx_keyofficestaff_domain_model_officestaff.name IS NULL
    4. AND (tx_keyofficestaff_domain_model_officestaff.sys_language_uid IN (0,-1))
    5. AND tx_keyofficestaff_domain_model_officestaff.deleted=0
    6. AND tx_keyofficestaff_domain_model_officestaff.t3ver_state<=0
    7. AND tx_keyofficestaff_domain_model_officestaff.pid<>-1
    8. AND tx_keyofficestaff_domain_model_officestaff.hidden=0
    9. AND tx_keyofficestaff_domain_model_officestaff.starttime<=1445343060
    10. AND (tx_keyofficestaff_domain_model_officestaff.endtime=0 OR tx_keyofficestaff_domain_model_officestaff.endtime>1445343060)
    11. ORDER BY tx_keyofficestaff_domain_model_officestaff.sorting ASC

    Herzlichen Dank
    m.orange

  • morange morange
    T3PO
    0 x
    25 Beiträge
    0 Hilfreiche Beiträge
    20. 10. 2015, 15:09

    Hallo McGregor,

    ich hab bei t3n ne sehr sehr schöne Lösung gefunden. :):):) (Y) Das muss einfach im Repository mit rein. :) jippieh

    1. protected $defaultOrderings = array ('name' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING);

    Aber auch herzlichsten Dank für deine Hilfe!
    m.orange

  • 1