Kategorien
- [-]Developer (104)
- API (15)
- Backend (17)
- Extensions (29)
- HTML & CSS (4)
- Typoscript (33)
- [-]Redaktionelles (21)
- Anleitungen (9)
- Tipps (8)
- [-]Sonstiges (50)
- SEO (8)
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
- DSGVO
- 26.05.2018 18:39
- Trackingtools und Datenschutzerklärung
- 14.03.2014 23:07
- 1:n und n:1 Relationen in Extbase
- 06.12.2013 12:04
- Erste Abmahnungen wegen Google Analytics
- 04.10.2013 12:11
Letzte Kommentare
- Das liegt daran, dass die captcha.php versucht, das halbe...
- 05.12.2017 00:41
- Hallo, danke für den tollen Beitrag. Kann man die...
- 22.10.2015 10:05
- Vielen Dank für den Austausch guter Artikel. Es ist eine...
- 17.08.2015 10:58
- Hallo Peter, danke für die Extension. Ich habe sie auf...
- 27.08.2014 12:51
In eigener Sache
Peter Linzenkirchner, Lisardo EDV Beratung 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 ...
Zur Zeit wird gefiltert nach: language
Filter zurücksetzen
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