Zum Inhalt springen

Frontend Daten mehrsprachig speichern?

Erstellt am 18. Oktober 2007 · 9 Antworten · letzte Antwort am 31. Oktober 2007

Tags: Datenbank, Frage

InforMedic ·

#paralyzed#

Hallo liebe Gemeinde,

ich sitze mal wieder vor einem kleinen Problem. Ich habe eine Extension geschrieben und möchte nun eine Tabelle, welche Mehrsprachig ist, über ein Frontend Formular befüllen.

Die Idee war, dass ganze einfach so wie im BE darzustellen. Formulare entsprechend einfach nachbilden.
Ansich ja kein Problem, allerdings scheitere ich an der Spalte "l18n_diffsource"?!? #paralyzed#

sys_language_uid ist klar -> die zu speichernde sprach uid!

l18n_parent ist auch klar -> uid der fallback language

l18n_diffsource weiss ich nur das darin der komplette Datensatz gespeichert wird, aber wie???

Wie mach ich das??? Kann mir jemand auf die Sprünge helfen?

Gruß
Info

InforMedic ·

#paralyzed# Hat denn noch niemand front end daten mehrsprachig gespeichert? Ich bin echt am Verzweifeln. Ich kann auch nirgends Tuts, für das speichern von l18n_diffsource daten finden. Hilföö

steffenk ·

um das Speichern brauchst Du Dich nicht zu kümmern, das macht das BE.
Das richtige Auslesen schaust Du Dir am besten in der tt_news an.

InforMedic ·

Ich weiss doch. Ich will nur genau das was das BE macht, im Frontend realisieren.

Spricht eine einfach tabelle (title, description) lokalisiert speichern.

Dazu zeige ich mir zuerst alle vorhandenen Datensätze an. Die wo noch nicht lokalisiert wurden, erhalten die Flagge der zu übersetzenden Sprache.

Klicke ich auf die Sprache, so wird das Formular eingeblendet, so wie im BE mit den infos der orig. Übersetzung. Ich mache meine Übersetzung und speichere das formular.

Wie bereits beschrieben, ist es kein Thema die Felder 'sys_language' und 'l18n_parent' zu befüllen, 'l18n_diffsource' aber schon.

Beim debuggen bereits über das BE lokalisierter Datensätze zeigt mir 'l18n_diffsource' folgendes an:

(string mit enter geteilt, da sonst das layout gesprengt wird=)

a:9:{s:16:"sys_language_uid";N;
s:6:"hidden";N;
s:18:"art_category_title";N;
s:14:"rma_compart_id";N;
s:17:"rma_compart_title";N;
s:23:"rma_compart_description";N;
s:21:"rma_compart_4customer";N;
s:20:"rma_compart_4support";N;
s:19:"rma_compart_4repair";N;}

Nur wie bastele ich mir diesen String ordnungsgemäß zusammen?

Danke und Gruß
Info

steffenk ·

das ist nichts anderes als ein serialisiertes array, schaus Dir mal an mit

t3lib_div::debug(unserialize($row['l18n_diffsource']));
InforMedic ·

ahh, jetzt komm ich der Sache langsam näher. Ich kannte die Funktion "serialize" bzw. "unserialize" noch gar nicht...

Ein 'unserialize' auf $row['l18n_diffsource'] spuckt mir überall dort, wo eine Übersetzung bereits stattgefunden hat, das Orig. Array aus =)

Ein 'serialize' auf die komplette $row, generiert mir diesen ellen langen string!

Daraus schliess ich jetzt mal, dass wenn ich einen komplett neuen lokalisierten Eintrag in der DB hinterlassen will, ich das Feld 'l18n_diffsource' mittels serialize($row) befülle.

Genauso auch wenn ich einen Datensatz lokalisiere, da muss ich auch 'l18n_diffsource' befüllen mit serialize($row)!

Werde ich gleich mal testen.

1000x Dank für Deinen Hinweis!!!!

Gruß
Info

steffenk ·

serialize wird häufiger benutzt, vor allem wenn man ein Array in einen String ablegen will.
Mit dem serialisierten Array des Original-Records wird im BE z.B. beim Übersetzen der Originalinhalt in den Labels angezeigt.

InforMedic ·

Super, danke dir für Deine Antwort. Klappt wunderbar mit dem Serialisieren.
Wieso mir die Funktion nach 5 Jahren php noch unbekannt war ist mir ein Rätsel :o

Hab das jetzt (fast) hingekriegt, eine Front-End Ausgabe genau so zu basteln wie im T3-Backend (lokalisierte Datensätze eingerückt darstellen, translate-flagg einblenden wenn nicht übersetzt etc.).

Vielleicht find ich ja irgendwann mal die Zeit eine vernünftige Front-End Extension zu schreiben, die genau das macht. Mit dem Unterschied dass die Ausgabe der Felder automatisch anhand der übergebenen Tabelle rendert wird und nicht fest codiert.

Gruß
Info

InforMedic ·

Ugh, eine Frage hätte ich doch noch....

Wenn man sich im BE in der Listenansicht die Datensätze anzeigen lässt (Sprachansicht) so sieht man doch in der column "Ref" die Anzahl auf diesen Datensatz referenzierte Einträge/Records.

Wie wird diese Anzahl errechnet? Das wird ja nicht in irgendeiner Spalte gespeichert, oder doch? Vielleicht in tt_content oder pages?