Kategorien
- [-]Developer (94)
- API (14)
- Backend (16)
- Extensions (26)
- HTML & CSS (4)
- Typoscript (31)
- [-]Redaktionelles (15)
- Anleitungen (6)
- Tipps (6)
- Sonstiges (36)
Schlagwortwolke
| « | August 2010 | » | ||||
|---|---|---|---|---|---|---|
| S | M | T | W | T | F | S |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 | ||||
Letzte Nachrichten
- Cookie Control und die europäische Cookie-Richtlinie
- 18.05.2012 21:41
- Schafft er es auf die erste Seite?
- 18.05.2012 14:39
- TYPO3camp Berlin 2012
- 11.05.2012 15:35
- Webdesign in Zeiten des iPad 3: und immer noch mehr Pixel.
- 10.05.2012 17:14
Letzte Kommentare
- Hallo David, das ist ein guter Tipp, werde ich mir...
- 13.05.2012 13:19
- Hallo! In der Aufzählung gehst du nicht auf den verfügbaren...
- 12.05.2012 14:35
- Müsste eigentlich so funktionieren, ich mache es hier ja...
- 10.04.2012 13:03
- Erst einmal - Danke für die Extension. Eine Frage habe...
- 10.04.2012 10:30
In eigener Sache
Peter Linzenkirchner, Lisardo Multimedia in Augsburg. Freelance und Partner für Design- und Webagenturen in Augsburg und München. Pixelgenaue Templates, valides HTML, barrierearm. TYPO3-Projekte, Extension-Programmierung und mehr ...
Sprachen in Extensions
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. Man erhält mit dieser Funktion den Sprachoverlay der Seite – das heißt, wenn es keine Übersetzung gibt, dann erhält man die Werte der Default-Sprache. Wenn tatsächlich eine Übersetzung in der aktuellen Sprache vorliegt, so enthält die Variable $row nach dem Obverlay noch zwei zusätzliche Arraywerte: _PAGES_OVERLAY=1 sowie _PAGES_OVERLAY_UID mit der uid der übersetzten Seite. Damit kann im Anschluss z. B. entschieden werden, ob die Seite auch »gezählt« werden soll. Will man nur übersetzte Seite ausgeben, so kann man auf die Existenz dieser Felder prüfen.
Weiterführende Links
- Kommentare

