[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