[TYPO3-german] Sprache in eigene Extension korrekt implementieren

Peter Linzenkirchner liste at lisardo.de
Mon Feb 15 19:11:40 CET 2010


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





More information about the TYPO3-german mailing list