Moin wallenium,
verstehe ich das recht: Du hast einige Felder zu Deinen Uploads, die NICHT von der Sprache abhängen (etwa Dateiname/pfad, Größe) und einige Felder, die in mehreren Sprachen vorliegen KÖNNEN (etwa Name und Beschreibung), Englisch ist Pflicht, aber alle anderen Sprachen sind optional und es kann sein, dass der Name zwar in DE und EN vorliegt, aber die Beschreibung nur in EN?
- Im Frontend sollen dann, falls der Benutzer DE sehen möchte, alle Felder, die DE haben, in DE gezeigt werden, die anderen in EN. Also gemischt-sprachig ... und in einer Listen-Anzeige kann es sein, dass einige Datensätze in DE bzw. gemischt, aber andere komplett in EN gezigt werden?
- Im Backend soll es dann nur genau einen logischen Datensatz zum Upload geben, so dass die NICHT von der Sprache abhängigen Felder nur 1 mal ausgefüllt werden müssen. Bei den von der Sprache abhängigen Feldern soll es möglich sein, alle Sprachen auszufüllen (also mehre Eingabefelder für ein und das selbe logische Feld)?
Von Hause aus unterstützt TL so etwas IMO nicht. Dazu, wie man das speichern kann, weiter unten, zunächst meine Idee zum Backend. Es gibt zwei Widget-Erweiterung [MultiTextWizard] und [textwizard], die man entweder direkt verwenden kann oder deren Code man als Vorlage nehmen könnte, um ein eigenes Widget zu programmieren. Der MultiTextWizard erscheint mir fast direkt geeignet (2 Spalten: Sprachkürzel und Feldtext) es sei denn, Du möchtest auch noch den Komfort einer Selectbox mit den verfügbaren Sprachen in der ersten Spalte haben (statt einer direkten Eingabe von 'en', 'de' usw).
Nun zur Speicherung: verwendest Du den MultTextWizard, dann speichert der alle Feld-Zeilen/Spalten als 2-dimensionales serialisiertes Array in dem DB-Feld und das läßt sich, so wie er programmiert ist, auch nicht verhindern. Nun ist das ja aber durchaus nicht schlecht. Mache das Feld zum BLOB, damit genug Platz zur Verfügung steht und in Deinem Frontendmodul musst Du dann mit einer Schleife über die selektierten Upload-Datensätze gehen, die Sprachfelder deserialisieren und die Anzeige aus den jeweils verfügbaren Sprachen zusammenbauen. An die gewünschte Sprache solltest Du via $GLOBALS['TL_LANGUAGE'] herankommen; ist die bei einem Feld da, gibst Du sie aus, sonst halt die EN (und wenn die nicht da ist, dann halt nach irgendeiner Priorität eine der verfügbaren).
Ich glaube, irgend ein Gedöns mit Auslagerung der Sprachfelder in eine eigene Tabelle kann man sich so komplett sparen. Das BLOB-Feld (oder meinethalben auch TEXT) ist sogar ganz brauchbar per SQL durchsuchbar (z.B. mit LIKE '%some string%'). Das liegt daran, dass serialisierte PHP Arrays die Strings im Prinzip im Klartext enthalten:
PHP-Code:
$serialize_test = array(
array('de', 'Eine Beschreibung in Deutsch'),
array('en', 'A description in English'),
array('xx', 'Een dösige Text op platt'),
);
// serialisiertes Array
a:3:{i:0;a:2:{i:0;s:2:"de";i:1;s:28:"Eine Beschreibung in Deutsch";}i:1;a:2:{i:0;s:2:"en";i:1;s:24:"A description in English";}i:2;a:2:{i:0;s:2:"xx";i:1;s:25:"Een dösige Text op platt";}}
Könnte das weiterhelfen?
LG, Georg
Lesezeichen