[TYPO3-german] extbase 6.0.0 - TranslationHandling
Johannes C. Schulz - EnzephaloN IT-Solutions
info at enzephalon.de
Tue Apr 16 12:23:21 CEST 2013
Hallo Renzo
Danke für Deine sehr ausführlichen Informationen.
Ich habe mich dahingehend nochmal in meinem Kopf umgeschaut und bei meiner Extension wohl den Haken gefunden:
Es gibt Datensätze die übersetzt sind, aber die Attribute (nach denen auch gesucht werden kann) sind nicht übersetzt. Dadurch kam es wohl dazu, daß nichts ausgegeben wurde, da extbase wohl versuchte die Übersetzungen der Attribute zu finden.
Ich habe mir jetzt so beholfen:
if(t3lib_div::_GP('l') != '0'){
$query->getQuerySettings()->setRespectSysLanguage(FALSE);
$langsearch = $query->logicalAnd($query->equals('sys_language_uid',1));
$constraint[] = $langsearch;
}
Das funktioniert schonmal für "englisch". Bei den anderen zwei Sprachen wird komischerweise "deutsch" ausgegeben...
Grüße
Johannes
-----Ursprüngliche Nachricht-----
Von: typo3-german-bounces at lists.typo3.org [mailto:typo3-german-bounces at lists.typo3.org] Im Auftrag von conPassione gmbh
Gesendet: Dienstag, 16. April 2013 11:53
An: typo3-german at lists.typo3.org
Betreff: Re: [TYPO3-german] extbase 6.0.0 - TranslationHandling
Hallo Johannes
Du machst folgendes:
mit setRespectSysLanguage(FALSE) setzt Du die Sprachbehandlung ausser Kraft, d.h. TYPO3 gibt Dir dann alle Datensätze aus ohne Einschränkung durch die Sprache! Es ist deshalb logisch, dass Du sie doppelt bekommst.
Der SQL String wird dann keine WHERE-Klausel haben mit sowas wie 'sys_language_uid' = XY.
Selber bin ich gerade daran unter 4.7.10 verknüpfte Datensätze sprachabhängig und mit fall-back Mechanismus auszulesen.
Das mache ich so:
Voraussetzung:
In Tabelle Events gibt es Datensätze wie diese:
uid title l10n_parent ...
1 TestD1 0
2 TestF1 1
3 TestD2 0
4 TestD3 0
5 TestF2 3
6 TestD4 0
d.h. bei jedem ins Französische übersetzten Datensatz "TestF.." wird in der Spalte l10n_parent die uid des "originalen" Deutschen Datensatzes gespeichert. Das macht TYPO3 so, wenn man eine Übersetzung eines Datensatzes im BE anlegt.
Für die Kategorien gilt dasselbe.
uid title l10n_parent ...
1 KatD1 0
2 CatF1 1
3 KatD2 0
4 CatF2 3
Nun habe ich das Problem, dass das Selektieren nach Kategorie schwierig wird, vor allem dann, wenn es ein fall-back geben soll!
Wenn ich einem Deutschen Datensatz eine Kategorie KatD1 zuordne,und dem auff Französich übersetzten Datensatz die entsprechende CatF1, kann ich nicht einfach nach Kategorie uid = 1 suchen, sonst finde ich die übersetzten nicht und umgekehrt.
Die Lösung für diese Probleme ist scheinbar einfach...
Ich brauche lediglich folgendes Konstrukt in meinem EventRepository:
public function findEventsByCategory($languageUid, $eventCatID,
$eventCatTranslatedID) {
$lan = array();
$lan[] = -1;
$lan[] = 0;
$lan[] = $languageUid;
$cat = array();
$cat[] = $eventCatID;
$cat[] = $eventCatTranslatedID;
$query = $this->createQuery();
$query->matching(
$query->logicalAnd(
$query->in('sys_language_uid', $lan),
$query->in('event_cat', $cat)
)
);
}
Damit werden auf der deutschen Seite alle Datensätze korrekt ausgegeben, inkl. der verknüpften Kategorien und dasselbe auf französisch. Dabei auf französisch alle französischen Datensätze angezeigt und wo es keine Übersetzung gibt, die deutschen. Die den deutschen Datensätzen zugeordneten Kategorien werden dabei auch auf Französisch übersetzt:
ausgegebene Liste in Deutsch und in Französisch
Event Kategorie Manifestation Categorie
TestD1 KatD1 TestF1 CatF1
TestD2 KatD1 TestF2 CatF1
TestD3 KatD2 TestD3 CatF2
TestD4 KatD2 TestD4 CatF2
Das einzige wirklich schwierige ist, von der $eventCatTranslatedID auf die originale $eventCatID zu schliessen, d.h. für eine uid in der Tabelle Kategorie die entsprechende l10n_parent rauszulesen.
Wichtig für mich war die Erkenntnis, dass Extbase sehr viel hilft bei dem Auslesen von Datensätzen, wenn man die Abfrage mit in('sys_language_uid', $lan) und nicht mit equals('sys_language_uid',
$languageUid) macht. Dann kommen die richtigen Datensätze!
Ich hoffe Dir damit etwas geholfen zu haben.
Und ich bin gerade daran, das auf 6.0.4 zu portieren um zu schauen, obs da auch noch funktioniert.
Liebe Grüsse
Renzo
________________________________________________________________________
Renzo Bauen
conPassione gmbh
T +41 33 345 00 92
M +41 79 330 10 11
http://www.conpassione.ch
TYPO3 Bronce Associate
Am Dienstag, den 16.04.2013, 10:44 +0200 schrieb Johannes C. Schulz - EnzephaloN IT-Solutions:
> Hallo nochmal zu diesem Thema
>
> Ich habe die Funktion weggeworfen und die if-Anweisung in meine
> Repository Methode eingefügt.
> if((integer)(t3lib_div::_GP('l')) > 0){
> $query->getQuerySettings()->setRespectSysLanguage(FALSE);
> $query->getQuerySettings()->setSysLanguageUid(1);
> }
> 1.) Durch das setRespectSysLanguage(FALSE) werden alle Datensätze zwar
> in der korrekten Sprache, dafür aber doppelt ausgegeben.
> 2.) das setSysLanguageUid(1) hat keinerlei Effekt.
>
> Was ist falsch??
>
> 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 - EnzephaloN IT-Solutions
> Gesendet: Dienstag, 16. April 2013 09:55
> An: typo3-german at lists.typo3.org
> Betreff: [TYPO3-german] extbase 6.0.0 - TranslationHandling
>
> Hallo Freunde
>
>
>
> Beim Versuch eine ältere Extension die ich geschrieben habe auf
> extbase 6 zum Laufen zu bringen, bemerkte ich plötzlich daß das
> TranslationHandling nicht mehr funktioniert.
>
> Bis jetzt läuft das unter typo3 4.7.10 alles ohne Probleme. Auf meinem
> typo3
> 6.0.4 Testserver zeigt die Listenansicht auf den englischen,
> französichen und holländischen Seiten aber keinerlei Datensätze mehr.
> Das Plugin wird geladen, aber es werden anscheinend keine Objekte an den View übergeben.
> Jetzt habe ich mal im Netz gesucht und folgende Funktion meinem
> Repository
> hinzugefügt:
>
> public function initializeObject(){
>
> /** @var $querySettings
> \TYPO3\CMS\Extbase\Persistence\Generic\Typo3QuerySettings */
>
> $querySettings =
> $this->objectManager->get('TYPO3\\CMS\\Extbase\\Persistence\\Generic\\
> Typo3Q
> uerySettings');
>
> if((integer)(t3lib_div::_GP('l')) > 0){
>
> $querySettings->setRespectSysLanguage(FALSE);
>
> $querySettings->setSysLanguageUid(1);
>
> $this->setDefaultQuerySettings($querySettings);
>
> }
>
> else{
>
> $querySettings->setSysLanguageUid(0);
>
> $this->setDefaultQuerySettings($querySettings);
>
> }
>
> }
>
>
>
> Allerdings hilft das nicht weiter. Die Liste bleibt leer.
>
> Kann mir hier jemand bitte weiterhelfen?
>
>
>
> 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
More information about the TYPO3-german
mailing list