[TYPO3-german] extbase 6.0.0 - TranslationHandling

conPassione gmbh info at conpassione.ch
Tue Apr 16 11:52:55 CEST 2013


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


More information about the TYPO3-german mailing list