Fehler in der Platzhaltersortierung 4.1.x

Dieses Forum enthält Diskussionen zu Bugs in ConPresso 4 und deren Lösungen.
Antworten
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Fehler in der Platzhaltersortierung 4.1.x

Beitrag von MarkusR »

Das Thema geistert ja schon länger durch das Forum, daher habe ich mir jetzt mal den Code angeschaut (der wohl von meinem move_placeholders abgeleitet, aber nicht identisch ist).

Fehler ist, daß beim "bottom"-Sortieren plötzlich die Platzierungen wiederholen und ab sofort kein korrektes Sortieren mehr möglich ist.

Daher muß IMHO in folgendem Codeblock in _admin/manage_placeholder.php

Code: Alles auswählen

    case 'bottom': // {{{
        $q = "SELECT id, pos, templates_id FROM ".CPO_PLACEHOLDERS." "
            ."WHERE id=".(int)$_GET['id'];
        $dbq = new DB;
        $dbq->query($q);
        $dbq->next_record();
        $id          = $dbq->v('id');
        $pos         = $dbq->v('pos');
        $template_id = $dbq->v('templates_id');

        $q = 'UPDATE '.CPO_PLACEHOLDERS.' '
            .'SET pos=pos-1 '
            .'WHERE templates_id='.(int)$template_id." "
            .'AND pos>'.((int)$pos);
        $dbq->query($q);

        $q = 'UPDATE ' . CPO_PLACEHOLDERS . ' AS t1, ' .
             '(SELECT MAX(pos) AS maxPos FROM ' . CPO_PLACEHOLDERS . ') AS t2 ' .
             'SET t1.pos = t2.maxPos WHERE t1.id = ' . (int)$id;
        $dbq->query($q);

        $dbq->query(
            'SELECT name FROM '.CPO_TEMPLATES.' '
            .'WHERE id='.(int)$template_id
        );
        $dbq->next_record();
        $templatename = $dbq->v('name');
        
        $pholderpos = $pos+1;
        $views = array('list');
        break; // }}}
der Update-Teil

Code: Alles auswählen

        $q = 'UPDATE ' . CPO_PLACEHOLDERS . ' AS t1, ' .
             '(SELECT MAX(pos) AS maxPos FROM ' . CPO_PLACEHOLDERS . ') AS t2 ' .
             'SET t1.pos = t2.maxPos WHERE t1.id = ' . (int)$id;
geändert werden zu

Code: Alles auswählen

        $q = 'UPDATE ' . CPO_PLACEHOLDERS . ' AS t1, ' .
             '(SELECT MAX(pos) AS maxPos FROM ' . CPO_PLACEHOLDERS . ') AS t2 ' .
             'SET t1.pos = t2.maxPos+1 WHERE t1.id = ' . (int)$id;
also noch ein einfaches +1 auf die Position aufgeschlagen werden...

Der Unterschied zu meinem ursprünglichen Code ist, daß ich die MAX-Position vor der Verschiebung ermittle (und somit +1 nicht erforderlich ist), im abgeleiteten Code in 4.1.x aber erst nach dem Verschieben aller anderen Platzhalter gezählt wird, wenn sich die aktuelle MAX-Position schon um 1 verringert hat, daher muß hier wieder 1 aufgeschlagen werden.

Und ich dachte schon, daß move_placeholders bereits diese Macke hätte... :lol:
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
Mr. Magpie
ConPresso-Profi
Beiträge: 1004
Registriert: 01.01.1970 01:00
Wohnort: Wuppertal
Hat sich bedankt: 274 Mal
Danksagung erhalten: 59 Mal

Beitrag von Mr. Magpie »

Schon irgendwie bezeichnend, dass auch nach fünf Tagen die CPO-Entwickler auf diesen Bugreport hin noch keine Reaktion zeigten :evil:
Günther Ludwig
Benutzeravatar
balu
ConPresso-Entwickler
Beiträge: 1748
Registriert: 01.01.1970 01:00
Hat sich bedankt: 81 Mal
Danksagung erhalten: 133 Mal

Beitrag von balu »

Hi,

sorry, aber auch wir haben mal Urlaub oder müssen Geld mit anderen Projekten verdienen. Bei solchen Bugs ist es oft schneller, uns direkt zu kontaktieren, als hier in der Community.

Steffen hat aber schon angedroht, dass jetzt wieder eine Nur-ConPresso-Phase auf uns zukommt.

Balu
Bartels.Schöne
ConPresso Support & Development
Ralf
ConPresso-Checker
Beiträge: 205
Registriert: 25.08.2005 10:58
Hat sich bedankt: 65 Mal
Danksagung erhalten: 14 Mal

Beitrag von Ralf »

balu hat geschrieben:... Steffen hat aber schon angedroht, dass jetzt wieder eine Nur-ConPresso-Phase auf uns zukommt.
Das hört sich aber seeehr Negativ an, ich hoffe natürlich einerseits das es mit CPO vorwärts geht und gewisse Wünsche endlich umgesetzt werden - doch unter Drohung zu arbeiten???
Benutzeravatar
balu
ConPresso-Entwickler
Beiträge: 1748
Registriert: 01.01.1970 01:00
Hat sich bedankt: 81 Mal
Danksagung erhalten: 133 Mal

Beitrag von balu »

Hi Markus,

negativ war das natürlich nicht gemeint :). Drohen ist vielleicht auch etwas übertrieben, aber manchmal neckt man sich halt ein wenig untereinander.

Und Steffen muss als Chef eben auch mal die (virtuelle) Peitsche schwingen und sagen: "In den nächsten Wochen machst Du CPO! Ausführen!", ist das halt eine "Drohung" ;-).

Balu
Bartels.Schöne
ConPresso Support & Development
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Ehrlich gesagt bin ich nun langsam entnervt, weil mir dieser Bug gerade in einem Webauftritt ein Template unbrauchbar gemacht hat.
Keine Sortierung mehr möglich...

Bin ich der Einzige, der auch mal umsortiert?
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Ralf
ConPresso-Checker
Beiträge: 205
Registriert: 25.08.2005 10:58
Hat sich bedankt: 65 Mal
Danksagung erhalten: 14 Mal

Beitrag von Ralf »

Vermutlich nicht, ...

ABER ich z.B. habe meine Projekte noch auf den Versionen 4.0.x laufen, da die Neuerungen von 4.1.x mir mehr arbeiten bringen würde um vorhandene WICHTIGE Dinge wieder reinzuprogrammieren, als die Vorteile der neuen Version.

Und wenn ich lese wieviel Ärger Du (MarkusR) mit der Version hast... nee da Warte ich lieber NOCHMALS 1 oder mehr Jahre bis eine neue Version kommt die HOFFENTLICH mal vieles umgesetzt hat, was wir uns hier schon die ganze Zeit wünschen (incl. der Fehlerbeseitigungen)!!
Benutzeravatar
Mr. Magpie
ConPresso-Profi
Beiträge: 1004
Registriert: 01.01.1970 01:00
Wohnort: Wuppertal
Hat sich bedankt: 274 Mal
Danksagung erhalten: 59 Mal

Beitrag von Mr. Magpie »

Full Ack, solange so grundsätzliche Dinge nicht reibungslos funktionieren, bleiben unsere Kunden bei CPO 4.0.x ... oder gehen mittel- bis langfristig zu anderen CM-Systemen, was natürlich sehr schade wäre.
Günther Ludwig
Benutzeravatar
hscha
ConPresso-Experte
Beiträge: 714
Registriert: 22.02.2006 22:00
Wohnort: Berlin
Hat sich bedankt: 217 Mal
Danksagung erhalten: 26 Mal
Kontaktdaten:

Beitrag von hscha »

Mir ist das Problem im Zusammenhang mit der Umstellung von 4.0.9 auf 4.1 begegnet. Ich habe die fehlerhaften Positionsnummern manuell in der Datenbank repariert. Danach ging's (ist natürlich keine Dauerlösung).

Grüße von
Horst
Benutzeravatar
balu
ConPresso-Entwickler
Beiträge: 1748
Registriert: 01.01.1970 01:00
Hat sich bedankt: 81 Mal
Danksagung erhalten: 133 Mal

Beitrag von balu »

Hi zusammen,

das Problem hat mich jetzt insgesamt mehrere Versuche, einige Stunden Arbeit und viele koffeinhaltige Getränke gekostet.

Ich hatte vor allem Schwierigkeiten, das ganze nachzuvollziehen, weil es in meinen Entwicklungs-Installationen immer funktioniert hat. Nach jedem "ganz nach unten sortieren" war die Reihenfolge so wie sie sein sollte.

In anderen Installationen von uns traten die Probleme mit der Sortierung aber auf. Erst nachdem ich mehrere von diesen Installationen untersucht hatte, ist mir aufgefallen, dass die ganz nach unten sortierten oft eine viel zu hohe ID erhielten (in dem Fall wäre das +1 eben falsch).

Kommen wir zur Lösung:

Code: Alles auswählen

        $q = 'UPDATE ' . CPO_PLACEHOLDERS . ' AS t1, ' .
             '(SELECT MAX(pos) AS maxPos FROM ' . CPO_PLACEHOLDERS . 
                 ' WHERE templates_id=' . (int)$template_id . ') AS t2 ' .
             'SET t1.pos = t2.maxPos+1 WHERE t1.id = ' . (int)$id;
Es muss also zum einen das +1 von MarkusR gemacht werden. Zusätzlich sollte aber auch die Abfrage der höchsten Sortierungsposition auf das aktuelle Template eingeschränkt werden.

Ansonsten wird nämlich die höchste Gesamtposition in der Spalte gesucht und das könnte (wie in meiner Entwicklungsumgebung) die passende Zahl sein, weil das Platzhalter-Demo-Template eine passende Anzahl an Platzhaltern aufweist. Und dann denkt man irgendwann, man ist zu alt für diese Schei^WProgrammierarbeit.

Balu
PS: Ich untersuche das noch weiter, weil ich dasselbe Problem bei der Sortierung per "cut'n'paste" vermute.
Bartels.Schöne
ConPresso Support & Development
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Ich hatte mir daraufhin mein move_Placeholders von 2009 angesehen. Dort wurde immer korrekt mit der ID des Templates gearbeitet... nur falls jemand Angst um seine 4.0.x haben sollte... da funzt es tadellos!

Und nicht vergessen das Löschen von platzierten Platzhaltzern. Auch dort tauchen schnell mal Lücken auf.

Ich habe da auch verschiedenste Szenarien bei mod_gallery 4.2 für die neue Sortierung durchgespielt und eigentlich prophylaktisch die resync-Funktion eingebaut, die auf jeden Fall (auch nach manuellen Eingriffen in die Datenbank) die Sortierung wieder neu arrangiert.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Antworten