[TYPO3-german] Bug in Templa Voila 1.0.1 bei Mehrsprachigkeit und Flexible Content Elements
Alexander Bohndorf
bohndorf at sitegeist.de
Thu Jun 22 15:26:29 CEST 2006
Hallo Tobias,
ich habe einen Bugreport erstellt unter der Nummer 0003720.
Dazu habe ich noch weitere Fehler in diesem Zusammenhang gefunden und
entsprechende Patches geschrieben:
Es gibt noch einen Fehler in class.t3lib_tcemain.php in
t3lib_tcemain::checkValue_flex():
Das XML eines FCE vor dem ersten Abspeichern nach Hinzufügen der weiteren
Sprachen sieht wie folgt aus:
<?xml version="1.0" encoding="iso-8859-1" standalone="yes" ?>
<T3FlexForms>
<data type="array">
<sDEF type="array">
<lDEF type="array">
<headline type="array">
<vDEF>Willkommen im Travel Charme Bernstein Prerow /
Fischland-Darß</vDEF>
</headline>
</lDEF>
</sDEF>
</data>
<meta type="array">
<currentLangId type="array">
<numIndex index="0">DEF</numIndex>
</currentLangId>
</meta>
</T3FlexForms>
Nach dem ersten Speichern macht t3lib_tcemain::checkValue_flex() folgendes
daraus:
<?xml version="1.0" encoding="iso-8859-1" standalone="yes" ?>
<T3FlexForms>
<data>
<sheet index="sDEF">
<language index="lDEF">
<field index="headline">
<value index="vDEF">Willkommen im Travel Charme Bernstein Prerow
/ Fischland-Darß</value>
<value index="vEN"></value>
<value index="vFR"></value>
<value index="vIT"></value>
</field>
</language>
</sheet>
</data>
<meta>
</meta>
</T3FlexForms>
Das Problem hierbei ist das leere <meta>-Tag, welches dann bei der Anzeige
der verschiedenen Sprachversionen der Felder im BE zum Fehler führt.
Hinter Zeile 1546 in t3lib_tcemain::checkValue_flex() kann man folgenden
Patch einfügen, damit das leere meta-Tag nicht in die XML-Struktur
geschrieben wird:
if(!is_array($currentValueArray['meta'])) unset($currentValueArray['meta']);
Um solche FCEs korrekt darzustellen, bei denen bereits ein leeres meta-Tag
eingefügt wurde, muss man die Klasse class.t3lib_tceforms.php in Methode
getSingleField_typeFlex() patchen:
Vor der Zeile (ca. Zeile 2063) mit
"$editData['meta']['currentLangId']=array(); "
muss man folgende Zeile einfügen:
if(!is_array($editData['meta'])) $editData['meta'] = array();
Viele Grüße,
Alexander Bohndorf
--
"Tobias Pierschel" <tobias.pierschel at vision-pool.de> schrieb im Newsbeitrag
news:mailman.1.1150836356.13439.typo3-german at lists.netfielders.de...
> Hallo Alexander,
> wäre schön, wenn du den Bug an das Bugteam weiterleiten könntest, daß
> scheint ja recht kritisch zu sein.
>
> Danke und viele Grüße
> Tobi
>
>
>
> Alexander Bohndorf schrieb:
>> Ich habe den Fehler jetzt selbst gefunden:
>>
>> Es handelt sich um einen Bug in der Flexforms-Klasse.
>>
>> While parsing the old XML and converting it to an array the part ['meta']
>> is empty.
>>
>> In class.t3lib_flexformtools.php in method traverseFlexFormXMLData
>> (ungefähr in Zeile 140) wird eine Zuweisung gemacht:
>> $editData['meta']['currentLangId'] = array();
>>
>> Da aber $editData['meta'] leer ist und kein Array, funktioniert die
>> Zuweisung nicht und das Subarray "currentLangId" wird gar nicht erzeugt.
>>
>> Um den Fehler zu beheben, muss man $editData['meta'] erst mal zu einem
>> Array machen, sofern es noch keines ist. Das geht einfach,
>> indem man folgende Zeile for das obige Statement schreibt:
>>
>> if(!is_array($editData['meta'])) $editData['meta'] = array();
>> $editData['meta']['currentLangId'] = array(); //das ist die alte Zeile
>>
>> Nach diesem Fix funktionieren auch alle FCE wieder, bei denen vorher nur
>> noch vA angezeigt wurde. Voraussetzung ist aber, dass man nicht
>> vorher schon versucht hat, das XML zu reparieren. Damit hat man dann
>> nämlich alle bestehenden Daten verloren.
>>
>> Viele Grüße,
>>
>> Alexander
>>
>> --
>>
>> "Alexander Bohndorf" <bohndorf at sitegeist.de> schrieb im Newsbeitrag
>> news:mailman.1.1150723963.11401.typo3-german at lists.netfielders.de...
>>
>>>Hallo!
>>>
>>>Wir haben in einem Projekt Typo3 4.0 mit Templa Voila 1.0.1 eingesetzt.
>>>Bisher hatten wir nur eine Sprache.
>>>Jetzt haben wir das Projekt um die Sprache englisch erweitert und in dem
>>>Zuge auch das XML der Flexible Content Elements um folgendes erweitert:
>>> <meta type="array">
>>> <langChildren type="integer">1</langChildren>
>>> <langDisable type="integer">0</langDisable>
>>> </meta>
>>>
>>>Wenn man dann das Element das erste Mal im Backend bearbeitet, dann sieht
>>>man korrekt jedes Feld einmal in der Standard-Sprache und darunter
>>>nochmal für vEN (englisch).
>>>Speichert man das Element dann ab, so erscheint nur noch eine Sprache vA
>>>und die Inhalte der Standard-Sprache erscheinen nur noch im
>>>Readonly-Modus wie für Übersetzer.
>>>
>>>Schaut man sich die TV Listenansicht an, so ist angeblich bei den FCE das
>>>XML kaputt. Wenn ich es bereinige, werden damit aber alle Inhalte
>>>gelöscht.
>>>
>>>Woran liegt das und kann man das Problem irgendwie beheben?
>>>
>>>Viele Grüße,
>>>
>>>Alexander
>>>
>>
>>
More information about the TYPO3-german
mailing list