[TYPO3-german] Extbase Sortierung zieht nicht
g4-lisz at tonarchiv.ch
g4-lisz at tonarchiv.ch
Tue Jul 7 11:41:54 CEST 2015
Hallo Johannes,
die Injection der Repositories sollte eigentlich klappen.
Der Standard-Fehler, der mir in dem Zusammenhang oft passiert ist, ist
der, dass ich vergessen habe, den System-Cache neu zu laden... Erst dann
wird die @inject Annotation beachtet.
Die Zeile
$query->setOrderings = $this->defaultOrderings;
ist überflüssig; der Default wird automatisch übernommen. Eigentlich
brauchst Du dann auch die Funktion findByXY() nicht zu überschreiben. Es
müsste reichen, wenn deine Repository-Klasse nur aus folgendem Code besteht:
class PersonRepository extends \TYPO3\CMS\Extbase\Persistence\Repository {
protected $defaultOrderings = array( 'accid' =>
\TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING );
}
Grüße,
Till
On 07/07/2015 08:45 AM, Johannes C. Schulz wrote:
> Hallo
>
> Ich habs selber herausgefunden.
> Das injecten von Repositories im Model scheint nicht zu gehen. Ich habe nun
> im Getter
>
> /**
> * Returns the persons
> *
> * @return
> \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EnzephaloN\Accreditation\Domai
> n\Model\Person> $persons
> */
> public function getPersons() {
> $objectManager =
> \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\O
> bject\\ObjectManager');
> $personRepository =
> $objectManager->get('EnzephaloN\\Accreditation\\Domain\\Repository\\PersonRe
> pository');
> $persons =
> $personRepository->findByAccreditation($this);
> return $persons->toArray();
> }
>
> Das funtkioniert - hoffentlich ohne hässliche Seiteneffekte.
>
> Johannes
>
> -----Ursprüngliche Nachricht-----
> Von: typo3-german-bounces at lists.typo3.org
> [mailto:typo3-german-bounces at lists.typo3.org] Im Auftrag von Johannes C.
> Schulz
> Gesendet: Dienstag, 7. Juli 2015 08:20
> An: 'German TYPO3 Userlist'
> Betreff: Re: [TYPO3-german] Extbase Sortierung zieht nicht
>
> Hallo Till
>
> Danke für Deine Antwort.
> Leider steh ich noch n bissl aufm Schlauch - vielleicht hilfst Du mir
> nochmal kurz.
>
> Accreditation-Model:
> /**
> * personRepository
> *
> * @var \EnzephaloN\Accreditation\Domain\Repository\PersonRepository
> * @inject
> */
> protected $personRepository = NULL;
> /**
> * Returns the persons
> *
> * @return
> \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EnzephaloN\Accreditation\Domai
> n\Model\Person> $persons
> */
> public function getPersons() {
> $persons =
> $this->personsRepository->findByAccreditation($this);
> return $persons->toArray();
> }
>
> PersonsRepository:
> /**
> *
> * define the default ordering of the persons
> */
> protected $defaultOrderings = array( 'accid' =>
> \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING );
>
> /**
> *
> * @param
> \EnzephaloN\Accreditation\Domain\Model\Accreditation$accreditation
> * @return array
> */
> public function
> findByAccreditation(\EnzephaloN\Accreditation\Domain\Model\Accreditation
> $accreditation){
> $query = $this->createQuery();
> $query->setOrderings = $this->defaultOrderings;
> $query->matching($query->equals('accreditation',
> $accreditation->getUid()));
> return $query->execute();
> }
>
> Bekomme ne Fehlermeldung, daß ich im Model findByAccreditation auf ein
> Non-Object anwende :-(
>
> Was mache ich falsch?
>
> Johannes
>
>
>
> -----Ursprüngliche Nachricht-----
> Von: typo3-german-bounces at lists.typo3.org
> [mailto:typo3-german-bounces at lists.typo3.org] Im Auftrag von
> g4-lisz at tonarchiv.ch
> Gesendet: Montag, 6. Juli 2015 18:02
> An: German TYPO3 Userlist
> Betreff: Re: [TYPO3-german] Extbase Sortierung zieht nicht
>
> Hi Johannes,
>
> dafür gibt es leider bis heute keine einheitliche Lösung für die Sortierung
> bei Object-Strrages.
> Das Sortieren nach Uid geschieht auch eher zufällig, bzw. hängt von der
> DB-Engine ab und in welcher Reihenfolge sie die Zeilen zurück liefert...
>
> Entweder sortierst Du die Objekte mit einer entsprechenden PHP-Funktion oder
> Du schreibst eine eigene eigene find-Methode im entsprechenden Repository,
> die im Getter des referenzierenden Objekts aufgerufen wird.
> Beides unschön, aber eine andere Lösung habe ich bisher nicht gefunden.
> Bei letzterer Variante musst Du toArray() auf das Resultat der find-Methode
> anwenden, da der Getter sonst einen falschen Typen zurück liefert.
>
> Also so was:
>
> public function getChildren() {
>
> $children = $this->childRepository->findByMother($this);
> return $children->toArray();
> }
>
> Grüße,
> Till
>
> On 07/06/2015 10:29 AM, Johannes C. Schulz wrote:
>> Hallo TYPO3-Freunde
>>
>>
>>
>> Ich habe eine Extension wo ich gerne Unterobjekte nicht nach „uid“
>> sondern nach dem Integer-Feld „accid“ sortieren lassen würde – sowohl
>> im Frontend als auch im Backend.
>>
>> Doch der Eintrag:
>>
>>
>>
>> /**
>>
>> * The repository for Types
>>
>> */
>>
>> class PersonRepository extends
>> \TYPO3\CMS\Extbase\Persistence\Repository {
>>
>> /**
>>
>> *
>>
>> * define the default ordering of the persons
>>
>> */
>>
>> protected $defaultOrderings = array( 'accid' =>
>> \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING );
>>
>> }
>>
>>
>>
>> im entsprechenden Kind-Objekt-Repository hat keine Wirkung. Das
>> Kind-Objekt ist ein ObjectStorage.
>>
>>
>>
>> Wir kann ich in Front- und Backend die Sortierung definieren?
>>
>>
>>
>> Typo3 6.2.12.
>>
>>
>>
>> Johannes
>>
>> _______________________________________________
>> TYPO3-german mailing list
>> TYPO3-german at lists.typo3.org
>> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
> _______________________________________________
> TYPO3-german mailing list
> TYPO3-german at lists.typo3.org
> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
>
>
> _______________________________________________
> TYPO3-german mailing list
> TYPO3-german at lists.typo3.org
> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
>
>
> _______________________________________________
> TYPO3-german mailing list
> TYPO3-german at lists.typo3.org
> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
More information about the TYPO3-german
mailing list