[TYPO3-german] Sprache in eigene Extension korrekt implementieren

Stefan Frömken firma at sfroemken.de
Tue Feb 16 08:30:20 CET 2010


Peter Linzenkirchner schrieb:
> Hallo,
> 
> ich Suche Infos, wie man Mehrsprachigkeit in eigene Extensions korrekt 
> implementiert.
> 
> Was die Ausgabe von statischen Text in Templates geht (via $this->getLL 
> etc) ist mir alles klar. Der Aufbau der Tabellen mit TCA funktioniert 
> auch, im Backend können problemlos Sprachdatensätze angelegt werden. Mir 
> geht es um die korrekte Abfrage der Daten aus den Tabellen. Ziel ist, 
> dass alle Sprachfeatures von TYPO3 funktionieren.
> 
> Ich hole mit diesem SQL-WHERE die Daten aus der DB:
> 
> $whereClause =
>        "pid=xyz " .
>        ' AND (sys_language_uid IN (-1,0) OR 
> (sys_language_uid='.$GLOBALS['TSFE']->sys_language_uid.' AND 
> l18n_parent=0)) ' .
>         $this->cObj->enableFields ( $tableName );
> 
> Danach werden sie so weiter verarbeitet:
> 
> while ( $row = $GLOBALS ['TYPO3_DB']->sql_fetch_assoc ( $newsResult ) ) {
>        if ($GLOBALS['TSFE']->sys_language_content) {
>                $row = 
> $GLOBALS['TSFE']->sys_page->getRecordOverlay($tableName, $row, 
> $GLOBALS['TSFE']->sys_language_content, 
> $GLOBALS['TSFE']->sys_language_mode == 'strict' ? 'hideNonTranslated' : 
> '');
>        }
> 
> Ok, das funktioniert so weit, dass ich in den Sprachen die richtigen 
> Inhalte bekomme, allerdings nur solange die Standardsprache (Deutsch) 
> auch sichtbar ist.  Wird die Standardsprache unsichtbar gestellt, 
> verschwindet auch die alternative Sprache. Das ist logisch, da ich über 
> meine $whereClause ja nur Datensätze finde, die in Deutsch auch sichtbar 
> sind. Wenn ich aber
> 
> $this->cObj->enableFields ( $tableName );
> 
> weglasse, stimmt die Ausgabe in der Standardsprache logischerweise nicht 
> mehr.
> 
> ich habe jetzt nur noch folgende Idee:
> 
>  $whereClause =
>              "pid=xyz " .
>              ' AND (sys_language_uid IN (-1,0) OR 
> (sys_language_uid='.$GLOBALS['TSFE']->sys_language_uid.' AND 
> l18n_parent=0)) ';
> 
> if ($GLOBALS['TSFE']->sys_language_content == 0 ) {
>              $whereClause .= $this->cObj->enableFields ( $tableName );
> }
> 
> 
> Umständlich, scheint aber zu funktionieren, auch wenn ich in der 
> alternative Sprache Datensätze unsichtbar schalte.
> 
> Macht man das so, oder gibts da nicht was einfacheres aus der API?
> 
> Vielen Dank
> Peter
> 

Ich kenn den genauen Befehl auch nicht. Ich glaub ich würd das selbst im 
Code mit TS realisieren. Dann muss ich mich nicht mit diesem l18n_parent 
rumschlagen.
Wenn Dich der Originalquery interessiert, würd ich im InstallTool das 
Debugging (displayErrors=2 + devIPmask) einschalten (auch für SQL) und 
einen Fehler in mein TS reinbauen sys-language IN (-1,0) statt 
sys_language IN (-1,0).
Dann kommt im Frontend die Meldung, dass das Feld sys-language nicht 
vorhanden ist und darunter erscheint der komplette Query, den TYPO3 
absetzt (lastBuildQuery).

Stefan


More information about the TYPO3-german mailing list