Up/Down Buttons im Seitenmodul fehlen nach Udate auf 4.3.3 [Gelöst]

  • 0 x
    10 Beiträge
    0 Hilfreiche Beiträge
    28. 07. 2010, 18:42

    Hallo zunächst an alle.

    Ich beschäftige mich zwar seit langem mit Typo3, doch sowas ist mir halt noch nicht passiert:

    Ich habe vor ein paar Wochen ein Update von 4.2.9 auf 4.3.3 gemacht. Seitdem vermisse ich bei den Content-Elementen im Seitenmodul die Buttons zum Ändern der Reihenfolge. Auch der Button "neues Element nach diesem erstellen" ist nicht da.

    Ich habe mich bisher mit dem Listenmodul beholfen. Da ist alles Ok! Doch kann ich das nicht in jedem Fall nutzen, weil bei mir die Extension kb_nescefe zum Einsatz kommt (nested content element containers). Die Hierarchie der Elemente wird im Listenmodul nicht dargestellt, sondern die Elemente in vermutlich der Reihenfolge ihrer Erzeugung aufgelistet.

    Aber die Buttons im Seitenmodul müssen ja irgendwie wieder hervorzuzaubern sein. Meine wochenlange Suche hat bisher nichts greifbares ergeben. Kann da jemand helfen?

    BTW: In einer parallelen (typo3_src ist ein symlink) Neuinstallation sind die Buttons da!

    Danke
    Harald


  • 0 x
    10 Beiträge
    0 Hilfreiche Beiträge
    13. 11. 2010, 15:04

    Mit dem Download ist woh in diesem Forum etwas foul. Also paste ich das ganze mal direkt hier rein:
    ______________________________________________________________

    Anpassungen in:
    typo3conf/ext/kb_nescefe/class.tx_kbnescefe_layout.php
    ------------------------------------------------------
    Die Buttons für Kopieren und Ausschneiden fehlen.
    Als ich noch PHP 5.2 im Einsatz hatte, fehlten auch die Up- und Down-Buttons.

    Bug 1:
    ------
    In der Methode insertIntoArray() steht:
    [color=red]list($afterKey) = array_intersect($position, $currentKeys);[/color]

    Das array_intersect() klappt, aber list() nicht.
    Grund: In der Doku von PHP 5.2 steht:
    "list() funktioniert nur bei numerischen Arrays und basiert auf der ANNAHME, DASS DIE NUMERISCHEN INDIZES BEI 0 BEGINNEN.

    Letzteres ist nicht der Fall, da array_intersect() Indizes aus den Original-Arrays benutzt!
    Daher ergibt list() NULL und wir landen bei if($arrayKey) immer im else-Zweig.

    Lösung:
    [color=green]$afterKey = array_shift(array_intersect($position, $currentKeys));[/color]

    Bug2:
    -----
    In der Methode insertIntoArray() steht:
    [color=red]$post = array_slice($array, $pos+$addOffset, NULL, true);[/color]

    $post ist danach aber leer. Darin sollten die Buttons sein, die ich vermisse. Grund ist der NULL-Parameter. (BTW: Das verhalten von array_slice() zeigt zumindest in PHP 5.2 sogar unterschiedliches Verhalten bei +0 und -0).

    Lösung 1:
    [color=green]$post = array_slice($array, $pos+$addOffset, count($array), true);[/color]

    Lösung 2:
    [color=green]$post = array_diff($array, $pre);[/color]

    Lösung 1 ist dabei wegen der Lesbarkeit zu bevorzugen, da es den eigentlichen Sinn der Anweisung besser dokumentiert. Diese Lösung wurde auch vom Entwickler, Bernhard Kraft, als offizielles Bugfix in forge eingestellt.

    DIFF:
    --------------------------------------------------------------
    diff class.tx_kbnescefe_layout.php.orig class.tx_kbnescefe_layout.php
    102c102
    < list($afterKey) = array_intersect($position, $currentKeys);
    ---
    > $afterKey = array_shift(array_intersect($position, $currentKeys));
    107c107
    < $post = array_slice($array, $pos+$addOffset, NULL, true);
    ---
    > $post = array_slice($array, $pos+$addOffset, count($array), true);

  • 0 x
    10 Beiträge
    0 Hilfreiche Beiträge
    13. 11. 2010, 15:07

    Mit dem Download ist woh in diesem Forum etwas foul. Also paste ich das ganze mal direkt hier rein:
    ______________________________________________________________

    Anpassungen in:
    typo3conf/ext/kb_nescefe/class.tx_kbnescefe_layout.php
    ------------------------------------------------------
    Die Buttons für Kopieren und Ausschneiden fehlen.
    Als ich noch PHP 5.2 im Einsatz hatte, fehlten auch die Up- und Down-Buttons.

    Bug 1:
    ------
    In der Methode insertIntoArray() steht:
    [color=red]list($afterKey) = array_intersect($position, $currentKeys);[/color]

    Das array_intersect() klappt, aber list() nicht.
    Grund: In der Doku von PHP 5.2 steht:
    "list() funktioniert nur bei numerischen Arrays und basiert auf der ANNAHME, DASS DIE NUMERISCHEN INDIZES BEI 0 BEGINNEN.

    Letzteres ist nicht der Fall, da array_intersect() Indizes aus den Original-Arrays benutzt!
    Daher ergibt list() NULL und wir landen bei if($arrayKey) immer im else-Zweig.

    Lösung:
    [color=green]$afterKey = array_shift(array_intersect($position, $currentKeys));[/color]

    Bug2:
    -----
    In der Methode insertIntoArray() steht:
    [color=red]$post = array_slice($array, $pos+$addOffset, NULL, true);[/color]

    $post ist danach aber leer. Darin sollten die Buttons sein, die ich vermisse. Grund ist der NULL-Parameter. (BTW: Das verhalten von array_slice() zeigt zumindest in PHP 5.2 sogar unterschiedliches Verhalten bei +0 und -0).

    Lösung 1:
    [color=green]$post = array_slice($array, $pos+$addOffset, count($array), true);[/color]

    Lösung 2:
    [color=green]$post = array_diff($array, $pre);[/color]

    Lösung 1 ist dabei wegen der Lesbarkeit zu bevorzugen, da es den eigentlichen Sinn der Anweisung besser dokumentiert. Diese Lösung wurde auch vom Entwickler, Bernhard Kraft, als offizielles Bugfix in forge eingestellt.

    DIFF:
    --------------------------------------------------------------
    diff class.tx_kbnescefe_layout.php.orig class.tx_kbnescefe_layout.php
    102c102
    < list($afterKey) = array_intersect($position, $currentKeys);
    ---
    > $afterKey = array_shift(array_intersect($position, $currentKeys));
    107c107
    < $post = array_slice($array, $pos+$addOffset, NULL, true);
    ---
    > $post = array_slice($array, $pos+$addOffset, count($array), true);