Zum Inhalt springen

Content alphabetisch sortiert ausgeben

Erstellt am 21. September 2015 · 4 Antworten · letzte Antwort am 20. Oktober 2015

Tags: TYPO3 6.x, Frage

morange ·

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

McGregor ·

Hi!

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

public function datensaetze($region) {
 $q = $this->createQuery();
 $q->getQuerySettings()->setRespectStoragePage(FALSE);
 return 
   $q->matching($q->equals('region',$region))
     ->setOrderings(Array(
       'sorting' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_DESCENDING
     ))->execute();
}

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:

$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 ·

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:

<?php

namespace TxOfficestaff\KeyOfficestaff\Controller;

/**
 * OfficestaffController
 */
class OfficestaffController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController {

    /**
     * officestaffRepository
     *
     * @var \TxOfficestaff\KeyOfficestaff\Domain\Repository\OfficestaffRepository
     * @inject
     */
    protected $officestaffRepository = NULL;



    /**
     * action list
     *
     * @return void
     */
    public function listAction() {
        $officestaffs = $this->officestaffRepository->findAll();
        $this->view->assign('officestaffs', $officestaffs);
    }

    /**
     * action show
     *
     * @param \TxOfficestaff\KeyOfficestaff\Domain\Model\Officestaff $officestaff
     * @return void
     */
    public function showAction(\TxOfficestaff\KeyOfficestaff\Domain\Model\Officestaff $officestaff) {
        $this->view->assign('officestaff', $officestaff);
    }

    /**
     * action
     *
     * @return void
     */
    public function Action() {

    }

}

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

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

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

$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.

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

Diese beiden Fehlermeldungen verweisen beiden auf diese Zeile:

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

Kannst du mir sagen, wo der Fehler liegt?

Besten Dank
M.Orange

morange ·

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:

SELECT tx_keyofficestaff_domain_model_officestaff.*
FROM tx_keyofficestaff_domain_model_officestaff
WHERE tx_keyofficestaff_domain_model_officestaff.name IS NULL
AND (tx_keyofficestaff_domain_model_officestaff.sys_language_uid IN (0,-1))
AND tx_keyofficestaff_domain_model_officestaff.deleted=0
AND tx_keyofficestaff_domain_model_officestaff.t3ver_state<=0
AND tx_keyofficestaff_domain_model_officestaff.pid<>-1
AND tx_keyofficestaff_domain_model_officestaff.hidden=0
AND tx_keyofficestaff_domain_model_officestaff.starttime<=1445343060
AND (tx_keyofficestaff_domain_model_officestaff.endtime=0 OR tx_keyofficestaff_domain_model_officestaff.endtime>1445343060)
ORDER BY tx_keyofficestaff_domain_model_officestaff.sorting ASC

Herzlichen Dank
m.orange

morange ·

Hallo McGregor,

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

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

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