Kategorien
- [-]Developer (92)
- API (14)
- Backend (16)
- Extensions (26)
- HTML & CSS (3)
- Typoscript (31)
- [-]Redaktionelles (15)
- Anleitungen (6)
- Tipps (6)
- Sonstiges (29)
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
- Datenschutzkonforme like-Buttons mit socialshareprivacy als...
- 22.09.2011 14:01
- Lightbox in eigener Extension
- 20.09.2011 23:26
- Eigene Datei-Icons in tt_news
- 20.09.2011 14:27
- socialshareprivacy - datenschutzkonforme Likebuttons
- 06.09.2011 21:54
Letzte Kommentare
- Hallo zusammen Falls Ihr das noch nicht gesehen habt, ich...
- 01.02.2012 02:35
- @Gunter: Wie kommst du drauf, das Fluid "beim Hersteller"...
- 30.01.2012 12:29
- Ich glaube, ich habe eine mögliche Datenschutzlücke in der...
- 30.01.2012 10:43
- Ich bin Journalistin und verstehe recht wenig von Typo3....
- 24.01.2012 17:47
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

