[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