Zum Inhalt springen

Im Repository die Sprache manuel setzen

Erstellt am 12. April 2011 · 4 Antworten · letzte Antwort am 26. Mai 2011

Tags: Frage

Razor_One ·

Hallo zusammen,

ich bastel gerade an einer Extension die ein neues Contentelement 'catalogpage' zur Verfügung stellt. Dieses Element ist in tt_content gespeichert (benötigt keine speziellen DB-Felder) und wird über den ctype erkannt. Hierdurch kann es einfach in verschiedene Sprachen übersetzt werden.
Im Frontend funktioniert alles soweit, auch Mehrsprachigkeit.

Im Backend gibt es ein Modul um diese Contentelemente in einer ausgewählten Sprache zu exportieren.
(Formular mit Selectbox zur Sprachauswahl und Submit Button)

Das Problem ist das die Elemente im Backend immer nur in der default-Sprache geladen/exportiert werden.

Das Repository sieht so aus:

public function findAll($language='') {        
    $query = $this->createQuery();
    $query->getQuerySettings()->setRespectStoragePage(false);
    $query->matching($query->equals('ctype', 'catalogpage'));

    if (TYPO3_MODE === 'BE') {        
        $query->matching($query->equals('sys_language_uid', $language));
    }
    
    $result = $query->execute();
}

Da extbase die Sprache selber verwaltet funktioniert das nicht:
$query->matching($query->equals('sys_language_uid', $language));

Wie kann ich die Sprache im Backend mit einbauen/erzwingen?

Razor_One ·

jain

Die Sprache wird in Extbase\Persistence\Storage\Typo3DbBackend mit der Methode doLanguageAndWorkspaceOverlay() überlagert.
Als optionalen 3. Parameter kann man hier die LanguageId übergeben. Leider ist die Methode protected und wird überall nur ohne den 3. Parameter aufgerufen (Extbase 1.3.0). Vielleicht wird das in einer späteren Version noch eingebaut, oder ich finds einfach nicht wie es besser geht.

Die oben benannte Methode nutzt in Zeile 948 t3lib_div::_GP('L') zur Spracherkennung, also mach ich:

...in meiner Repository Methode

$temp_language = t3lib_div::_GP('L');
$_POST['L'] = $neue_language_id;  // t3lib_div::_GP nutzt direkt die POST Variable

// hier die DB abfrage
$query = $this->createQuery();
.......
$result = $query->execute();

$_POST['L'] = $temp_language;

Das ist leider sehr unschön, funktioniert aber für mich.

PS: deine Homepage gefällt mir

greenbanana ·

Hallo

Vielen Dank für den Tipp. Bin heute leider noch nicht dazu gekommen es zu implementieren.
Werde meine Erfolge (und Erkenntnisse) aber bei Gelegenheit hier posten.

Danke auch für das Kompliment für die Seite www.greenbanana.ch ;-)