Navigation

 ·   Wiki Home
 ·   Wiki Hilfe (englisch)
 ·   Kategorien
 ·   Titel-Liste
 ·   Uncategorized Pages
 ·   Zufällige Seite
 ·   Datei hochladen
 ·   Hochgeladene Dateien
 ·   Letzte Änderungen
 ·   RSS
 ·   Atom
 ·   What Links Here

Aktive Mitglieder :

Suchen:

 

Seite erstellen oder suchen :

 

Zeigen Sprachen in Extension

Die Verarbeitung von Sprachen in Extensions geht in mehreren Schritten vor sich:

Spracheinstellungen aus config

Zuerst muss die Spracheinstellung (Modus) aus config im Setup ausgelesen werden, am besten in der main()-Funktion oder in einer speziellen init()-Funktion, die aus main() ausgerufen wird:

$this->sys_language_mode = $this->conf['sys_language_mode']?$this->conf['sys_language_mode'] : $GLOBALS['TSFE']->sys_language_mode;

#####
# Mögliche Werte:
#
# [leer]: Das System fällt in die Standardsprache zurück,
#            wenn keine Übersetzung vorliegt.
#
# "content_fallback": Es wird immer mit der Übersetzung gearbeitet,
#                             auch wenn eine Seite nicht übersetzt
#                             wurde. Dadurch fallen die Menüs nicht immer
#                             auf die Standardsprache zurück.
#
# "strict": Bei fehlenden Übersetzungen wird nichts gezeigt,
#             auch nicht die Standardsprache.
#
#########

Der Wert für $this->sys_language_mode wird entweder aus der lokalen Konfiguration der Extension entnommen oder aus den config-Einstellungen im Setup.

Datenbankabfrage

Bereits bei der Datenbankabfrage muss die Sprache berücksichtigt werden, da sich die Übersetzungen in der gleichen Datentabelle befinden wie die Defaultsprache, nur mit einer anderen uid und der uid der Sprachversion im Feld “sys_language_uid”.

$where = 'pid = ' . $pid . ' AND sys_language_uid IN (-1,0) '. $this->cObj->enableFields('tt_content');
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
    
'*',
    
'tt_content',
    
$where ,
    
'',
    
'',
    
''
);

Dadurch wird sichergestellt, dass immer nur die Datensätze der Default-Sprache ausgelesen werden, nicht die Übersetzungen. Diese werden im nächsen Schritt geholt.

Language Overlay

Über eine spezielle Abfrage wird die Default-Sprache überschrieben:

while (($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))) {
    
// wenn eine andere als die Defaultsprache gewählt wurde
    
if ($GLOBALS['TSFE']->sys_language_content) {
        
// Daten mit Language-Overlay überschreiben
        
$row = $GLOBALS['TSFE']->sys_page->getRecordOverlay('tt_content', $row, $GLOBALS['TSFE']->sys_language_content, $this->sys_language_mode == 'strict' ? 'hideNonTranslated' : '');
    
}
}

Dieser Aufruf bringt die neue Sprache zurück, falls eine vorhanden ist und solange der Modus nicht ‘strict’ lautet. Wenn keine Übersetzung vorhanden ist, wird die Defaultsprache zurückgeliefert, wenn jedoch zusätzlich sys_language_mode = ‘strict’ ist, dann wird ein leeres Array zurückgeliefert.

Bei pages geht es etwas anders:

Der obige Weg muss immer eingeschlagen werden, wenn sich die Sprachversionen in der gleichen Datentabelle befinden, wie üblich in tt_content oder in Extensions. Bei den Seiten ist es allerdings etwas anders, da es hier eine eigene pages_language_overlay-Tabelle gibt. Folglich muss bei der Datenbankabfrage nicht die language_uid berücksichtigt werden, da immer nur die Seite in der Defaultsprache gefunden wird.

Es muss nur im Anschluss an die Abfrage erneut der Language-Overlay aufgerufen werden:

while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
    
if ($GLOBALS['TSFE']->sys_language_content) {
        $row
= $GLOBALS['TSFE']->sys_page->getPageOverlay($row);
    
}
}

Wie man sieht, funktioniert es etwas anders als bei normalen Content-Elementen.

Weiterführende Links

Category:Typo3 -> Extensions -> Programmierung

Kategorien: