Schnellnavigation:

Kategorien

« März 2024»
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

Kopieren Sie diesen Link in Ihren RSS-Reader

RSS 0.91Nachrichten
RSS 2.0Nachrichten

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

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:

  1. $this->sys_language_mode=$this->conf['sys_language_mode']?$this->conf['sys_language_mode']:$GLOBALS['TSFE']->sys_language_mode;
  2.  
  3. #####
  4. # Mögliche Werte:
  5. #
  6. # [leer]: Das System fällt in die Standardsprache zurück,
  7. #      wenn keine Übersetzung vorliegt.
  8. #
  9. # "content_fallback": Es wird immer mit der Übersetzung gearbeitet,
  10. #              auch wenn eine Seite nicht übersetzt
  11. #              wurde. Dadurch fallen die Menüs nicht immer
  12. #              auf die Standardsprache zurück.
  13. #
  14. # "strict": Bei fehlenden Übersetzungen wird nichts gezeigt,
  15. #      auch nicht die Standardsprache.
  16. #
  17. #########
  18.  

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”.

  1. $where='pid = '.$pid.' AND sys_language_uid IN (-1,0) '.$this->cObj->enableFields('tt_content');
  2. $res=$GLOBALS['TYPO3_DB']->exec_SELECTquery(
  3.     '*',
  4.     'tt_content',
  5.     $where,
  6.     '',
  7.     '',
  8.     ''
  9. );

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:

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

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:

  1. while ($row=$GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)){
  2.     if ($GLOBALS['TSFE']->sys_language_content){
  3.         $row=$GLOBALS['TSFE']->sys_page->getPageOverlay($row);
  4.     }
  5. }

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

 

 

Kategorien: API/Extensions  Kommentare 0
Tags: api, language