[TYPO3-german] extbase 6.0.0 - TranslationHandling

Johannes C. Schulz - EnzephaloN IT-Solutions info at enzephalon.de
Fri Apr 19 12:54:49 CEST 2013


Hallo nochmals liebe typo3-Freunde

Ich muß die Frage nochmal stellen, da ich immer noch nicht zu einem adäquaten Ergebnis gekommen bin.

Meine Extension beinhaltet Datensätze in Deutsch und (übersetzt) in Englisch.
Die dazugehörige Seite bietet auch noch französisch und holländisch an.
Auf den frz. Und holl. Seiten sollen die englischen Datensätze angezeigt werden.
Dies versuche ich mittels:

/* Wenn Englisch, Französisch oder Niederländisch, zeige die englischen Inhalte */
    if(t3lib_div::_GP('l') != '0'){
      $query->getQuerySettings()->setRespectSysLanguage(FALSE);
      $langsearch = $query->logicalAnd($query->equals('sys_language_uid',1));
      $constraint[] = $langsearch;
      var_dump($langsearch);
    }

zu erreichen.
Doch auf den frz. Und holl. Seiten werden die deutschen Inhalte geladen, obwohl ich doch die Abfrage zu sys_language_uid = 1 zwinge.

Was muß ich hier noch beachten??

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 12:48
An: 'German TYPO3 Userlist'
Betreff: Re: [TYPO3-german] extbase 6.0.0 - TranslationHandling

Hi Renzo

Ich bin mir nicht sicher, ob das der richtige Weg ist.
Ich habe ja nur deutsche und englische Datensätze, will daß die englischen auch auf französisch und holländich angezeigt werden. Also versuche ich die SQL-Abfrage mit dem $langsearch = $query->logicalAnd($query->equals('sys_language_uid',1)); im Falle, daß _GP('l') != 0 ist dazu zu zwingen, die englischen Datensätze zu holen.
Das Ganze in
if(t3lib_div::_GP('l') != '0'){
     // $query->getQuerySettings()->setRespectSysLanguage(FALSE);
      $langsearch = $query->logicalAnd($query->in('sys_language_uid',array(-1,1)));
      $constraint[] = $langsearch;
    }
zu ändern, brachte wieder leere Ausgaben.

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 12:37
An: typo3-german at lists.typo3.org
Betreff: Re: [TYPO3-german] extbase 6.0.0 - TranslationHandling

Hallo Johannes

ich denke, das liegt daran, dass Du via equals('sys_language_uid',1) ja wirklich nur Englisch ausliest.
Da kannst Du eigentlich die Zeile mit setRespectSysLanguage fallen lassen und das "equals" mit "in" ersetzten und gegen einen Array mit
(-1,0,Sprachcode) testen, dann werden die richtigen Sprachen ausgelesen.

Gruss 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, 12:23 +0200 schrieb Johannes C. Schulz - EnzephaloN IT-Solutions:

> 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
> 
> _______________________________________________
> 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