Zum Inhalt springen

Database Relations Mehrsprachig

Erstellt am 8. Mai 2009 · 2 Antworten · letzte Antwort am 10. Mai 2009

Tags: Frage

JayR ·

Hallo zusammen,

ich habe mir mit dem Kickstarter eine neue Extension angelegt welche zweisprachig gepflegt werden soll.

Nun habe ich zwei neue Tabellen angelegt. Nennen wir sie der Einfachheit halber:

- "Produkte" und
- "Zielgruppen"

Für beide Tabellen habe ich das Localization feature aktiviert, so dass in beiden Datensätzen die Sprachauswahl aktiv ist.

Innerhalb der Tabelle "Produkte" gibt es ein Feld (Database Relation) names "Liste der Zielgruppen". Wie die meisten jetzt sicher vermuten ist das eine einfache Relation zu der Tabelle "Zielgruppen". Dazu habe ich eine Selectorbox gewählt die maximal 20 Elemente einfügen kann und 5 Elemente groß ist.

Nun stehen in der Tabelle "Zielgruppen" schon einige Datensätze drin, die auch bereits übersetzt wurden.

Wenn ich nun unter "Produkte" in die Selectorbox schaue werden mir sämtliche Datensätze (Deutsch UND English) angezeigt.

Das ist natürlich äußerst verwirrend, z.B. für einen englischen Redakteur, wenn in der Auswahl deutsche und englische Zielgruppen wild gemischt auftauchen.

Nun zu meiner Frage:
Ist es möglich die Ansicht der Datensätze in der Selectorbox auf eine Sprache einzuschränken????

Ich würde gerne den englischen Redakteuren nur die englischen und entsprechend den deutschen Redakteuren nur die deutschen Zielgruppen präsentieren. Es wäre aber auch nicht schlecht diese Unterscheidung anhand der Sprachwahl des aktuellen Datensatzes zu machen.

Vielen Dank schon mal im Voraus für jede Hilfe!!!!
Gruß Jan

JayR ·

Ich habe gerade eine Möglichkeit gefunden die Anzeige der Elemente einzugrenzen. Allerdings ist diese Lösung nicht besonders benutzerfreundlich. Und zwar wird der Wert im "foreign_table_where" der Datei tca.php wie folgt gesetzt. ( wichtig ist der Teil => CAST(...) )

'foreign_table_where' => 'AND tx_myext_target.pid=###CURRENT_PID### AND sys_language_uid=CAST("###REC_FIELD_sys_language_uid###" AS UNSIGNED)  ORDER BY tx_myext_target.targetname',

Allerdings wird bei einer Neuanlage immer die Defaultsprache ausgewählt, da sys_language_uid zu dem Zeitpunkt noch nicht gesetzt ist. Sobald aber der Datensatz abgespeichert wurde, wird auch die Liste in der Selectbox in der richtigen Sprache angezeigt.

Gibt es eine Möglichkeit im TCA die Sprache des Backend-Users abzufragen????
Dann wäre eine Abfrage wie "...sys_language_uid=BE_USER_sys_languge_uid" möglich!?

Oder denkbar wäre auch eine Art displayCondition (wie bei den Flexforms) für die Sprachwahl.

JayR ·

Ich habe das Problem inzwischen folgendermaßen gelöst:

1. Neue Mini-Extension erstellt, welche in der Tabelle Backend-User (be_users) ein neues Sprachwahl-Feld (Selectorbox) anlegt.

2. Danach kann pro BE-User eine Sprache eingestellt werden

3. Dann in der Datei tca.php ganz oben (nach if(!defined...)) folgende Zeile eingefügt.

$be_user_lang = $GLOBALS["BE_USER"]->user['tx_beuserlang_language'];

4. Ebenfalls in tca.php in allen Feldern die nur eine Sprache anzeigen sollen den Inhalt von "foreign_table_where" erweitert:

'foreign_table_where' => 'AND sys_language_uid = '.$be_user_lang.' ORDER BY tx_myext_field.uid',

Nun werden in den Auswahlfeldern meiner Extension nur noch die Sprachen angezeigt die auch für den BE-User ausgewählt sind.

Es ist zwar reichlich blöd mit sich selbst zu sprechen.....aber vielleicht hilft das ja irgend jemanden auch weiter! ;-)