Reihenfolge selektive Seitenstruktur bei Benutzern fehlerhaft #3423
Comments
Behoben in 69de575. --- Originally created on September 12th, 2011, at 05:00pm |
Wie kann ein array_reverse dieses Problem lösen? Ist das nicht eher Zufall? --- Originally created on September 12th, 2011, at 05:22pm |
$arrPages = array_reverse($arrPages); in die controller.php zu schreiben löst bei mir das Problem nicht wirklich. Struktur ist jetzt zwar verändert...aber die Reihenfolge wie bei einem Admin ist es nach wie vor nicht. --- Originally created by FrankyMUC on September 12th, 2011, at 05:23pm |
Testzugang kann ich gerne zur Verfügung stellen. --- Originally created by FrankyMUC on September 12th, 2011, at 05:24pm |
Ich dachte, ein umgekehrtes Array wäre die Folge Deiner Änderung der
--- Originally created on September 12th, 2011, at 06:25pm |
Das Problem ist, dass die Reihenfolge nicht mehr definiert ist, sondern "zufällig" bzw. nach Level. Ich arbeite bereits an einer Lösung ;-) --- Originally created on September 12th, 2011, at 06:33pm |
Sooo... der angehängte Patch sollte das Problem beheben. Die angepasste Funktion erlaubt einen Mix aus der alten und neuen Variante. Es kann zwar (Optional) nach dem Sortierschlüssel der Datenbank sortiert werden, allerdings werden trotzdem nicht mehr so extrem viele Datenbankabfragen benötigt (es läuft in PHP). Ich hoffe das ist schneller... --- Originally created on September 12th, 2011, at 06:50pm |
Passt jetzt. Danke! --- Originally created by Kahmoon on September 12th, 2011, at 07:12pm |
Was genau machen die ganzen Schleifen und --- Originally created on September 13th, 2011, at 09:55am |
Nein, leider wohl nicht. Mein Patch sortiert die gefundenen Child-Datensätze jeweils direkt nach den Parent-Datensätzen ein. Bei dir wird alles einfach zusammengeführt ( --- Originally created on September 13th, 2011, at 10:50am |
Dann bräuchte ich bitte mal ein Test-Szenario. Welche Seiten aus der Music Academy habt ihr der Benutzergruppe als Pagemout zugeordnet und in welcher (falschen) Reihenfolge werden diese angezeigt? --- Originally created on September 13th, 2011, at 11:07am |
Für mich ist das Problem logisch... ich versuch es mal zu erklären:
Die Funktion
|
Ich stimme Dir fast zu, bis auf
Wir können sehr wohl sicher sein, dass die Reihenfolge stimmt, denn sie wird ja über das PageTree-Widget festgelegt und das ist wie die Seitenstruktur aufgebaut. --- Originally created on September 13th, 2011, at 11:33am |
Das habe ich mich auch gefragt, warum es bei Franky falsch ist. --- Originally created on September 13th, 2011, at 11:34am |
Was dann die Eigenverantwortung des Entwicklers wäre. Immerhin kostet die zusätzliche Sortierung Zeit und Ressourcen - und das bei einer rekursiven Funktion. Nicht optimal … --- Originally created on September 13th, 2011, at 11:35am |
Aber ohne diese Funktion gibt es ja auch keine Möglichkeit, die IDs in korrekter Reihenfolge zu bekommen? Beispiel ich möchte per Code eine zusätzliche ID zum PageMount des Benutzers hinzufügen. --- Originally created on September 13th, 2011, at 11:37am |
Aktuell habe ich beide gepatchten PHP Files bei meiner Installation laufen und es sieht alles gut aus. Die Seite ist noch nicht produktiv. Benutzer mit einzelnen Pagemounts wären angelegt. Testzugang + FTP Zugang kann ich per PN im Forum schicken -> Kahmoon. --- Originally created by FrankyMUC on September 13th, 2011, at 11:49am |
Was meinst du mit "beide gepatchten PHP Files"? --- Originally created on September 13th, 2011, at 11:56am |
Ich hab die Controller.php und DC_Table.php mit euren Änderungen angepasst. --- Originally created by FrankyMUC on September 13th, 2011, at 11:59am |
"euren"? Es gibt eine Variante von Leo und eine von mir, kombinieren lassen sich diese nicht wirklich... --- Originally created on September 13th, 2011, at 12:03pm |
Deine Variante http://dev.contao.org/attachments/1124/Controller.php.patch und die von LEO für DC_Table.php http://dev.contao.org/attachments/1126/DC_Table.php.patch --- Originally created by FrankyMUC on September 13th, 2011, at 12:05pm |
Ah, verstehe. Die von Leo für DC_Table hat mit meinem Controller-Patch keine Auswirkung ;-) --- Originally created on September 13th, 2011, at 12:06pm |
Theoretisch könntest Du die neue ID mittels --- Originally created on September 13th, 2011, at 12:26pm |
das kann ich nur in meinem eigenen Modul, wenn ich meine Version der getChildRecords nachbaue, oder? Ich meine, man sollte die Option zur Verfügung stellen im Core, ob --- Originally created on September 13th, 2011, at 12:31pm |
Was genau meinst Du jetzt? --- Originally created on September 13th, 2011, at 12:48pm |
Wenn ich beispielsweise dem PageMount-Array meine eigenen Einträge hinzufügen möchte, muss ich ja eine Möglichkeit haben diese korrekt zu sortieren. Das müsste ich dann selber bauen, wenn die entsprechende Funktion im Core nicht vorhanden ist. --- Originally created on September 13th, 2011, at 01:17pm |
Ja, das müsstest Du. Aber wie oft kommt das wirklich vor? --- Originally created on September 13th, 2011, at 01:23pm |
Das kann ich nicht sagen, aber es schadet nicht diese Funktion zu haben, oder? Wenn der Core sie nicht benutzt, besteht auch kein Performance-Problem. --- Originally created on September 13th, 2011, at 01:31pm |
Controller::eliminateNestedPages():
Das hier:
Hält die Sortierung von $arrPages aufrecht. (Ich rede hier nicht von aufeinanderfolgenden Index-Keys) Sofern dann $arrPages die richtige Reihenfolge hat, passt das.
Also muss man die Sortierung bei jedem Laden der DC_Table gewährleisten. Sofern ->getChildRecords die Datensätze in Preorder zurückgibt, kann man auch weiterhin folgendes nehmen:
Aber bisher gibt ->getChildRecords in Levelorder zurück. Ok Leo Patch führt die Preorder in ->getChildRecords ein, und das sollte auch ziemlich performant sein. @andreas: Wenn du dynamisch etwas richtig sortiert hinzufügen willst machst du das einfach so mit leos variante:
Das sollte auch schnell sein, da alle Querys gecacht sind. --- Originally created by backbone on September 13th, 2011, at 01:33pm |
Danke Oli, das mit dem Umsortieren nach dem Speichern der PageMounts war der richtige Tipp. Wir können also nicht sicher sein, dass die Reihenfolge stimmt... --- Originally created on September 13th, 2011, at 01:41pm |
Wo genau ist der Unterschied zu --- Originally created on September 13th, 2011, at 01:56pm |
`leo:
--- Originally created by backbone on September 13th, 2011, at 02:44pm |
Was meinst du mit "preorder"? Die Sortierung erfolgt nach pid und sorting, aber das bezieht sich ja nicht auf alle Level. --- Originally created on September 13th, 2011, at 09:19pm |
Preorder ist eine Ausgabevariante der Tiefensuche: Und ich hab nochmal Leos Lösung angeschaut angeschaut, das passt leider nicht.
Gibt Leos Variante anstatt: --- Originally created by backbone on September 13th, 2011, at 10:56pm |
Ja das meinte ich eben auch. Aber mit meiner sollte es funktionieren :-) --- Originally created on September 14th, 2011, at 01:01pm |
Behoben in 86393f8. --- Originally created on November 3rd, 2011, at 02:29pm |
Ich möchte hier nochmal drauf hinweisen, dass der Algorithmus nicht sehr effizient ist. Du machst für JEDE Seite ein Query, das ist der Overkill, vorallem da die Querys durch das FIND_IN_SET-Zeug extrem lang werden. Bitte schau dir mal meine Erweiterung backboneit_navigation an und da in das Navigationsmodul, da hab ich einen iterativen Algorithmus, der nur einmal für jede Ebene abfragt und das ohne diesen ganzen FIND_IN_SET-Kram. Ich schau mal ob ich dir dafür einen Patch zusammenbauen kann. --- Originally created by backbone on November 3rd, 2011, at 03:07pm |
Schau Dir den Code bitte noch mal genau an. --- Originally created on November 3rd, 2011, at 09:22pm |
Ich nehm alles zurück und behaupte das Gegenteil ;) --- Originally created by backbone on November 4th, 2011, at 01:56pm |
FIND_IN_SET() brauchen wir aber, damit die Reihenfolge beibehalten wird. Wenn Du eine effektivere Lösung hast, bauen wir diese natürlich gerne alternativ ein :) --- Originally created on November 4th, 2011, at 02:19pm |
Ja, eine effektivere Lösung habe ich in meinem Navigationsmodul umgesetzt. Da werden auch die Kindknoten lediglich Anhand der Spalte "sorting" sortiert und dann in PHP der jeweiligen Parent-ID zugeordnet. Das ist wesentlich effizienter als das FIND_IN_SET da dort im Prinzip alles mit schnellen array-index Zugriffen durchgeführt wird. --- Originally created by backbone on November 4th, 2011, at 05:55pm |
Wie hoch stehen unsere Chancen, dass Du einen Patch auf Basis des aktuellen Branches bereitstellst? :) --- Originally created on November 4th, 2011, at 07:58pm |
Ich setz mich heut abend mal dran. --- Originally created by backbone on November 4th, 2011, at 07:59pm |
Siehe Patch (Nur Controller). Edit: Der diff-View sieht etwas unglücklich aus, aber es sind im Prinzip neue Methoden und die vorhandenen Methoden die bearbeitet wurden sind nur noch Delegates. Zu beachten ist hier das eliminateNestedPages die Input-Order der Nodes beibehält, das sollte mehr backwards-kompatibel sein. --- Originally created by backbone on November 5th, 2011, at 12:18am |
--- Originally completed on November 3rd, 2011, at 02:29pm |
The algorithms are provided by the static lib class DBAdjacencyListTree and the old Controller methods are delegating and marked as deprecated.
Ich habe bei einer frischen Installation von Contao 2.10 neue Benutzergruppen angelegt und selektive Pagemounts erstellt. Dabei ist mir aufgefallen das dabei die Reihenfolge der Strukturpunkte verloren geht. Um auszuschließen das dies nur in meiner Installation auftritt, habe ich in der Onlinedemo eine testsite ganz oben eingefügt und bei Pagemounts des User hinzugefügt. Bei User h.lewis selbst wird sie allerdings ganz unten angezeigt. Das liegt dann wohl an der Page ID. Sieht so aus als sortiert er danach und nicht nach der Struktur im Backend. Siehe Anhänge
Hier die Diskussion im Forum: http://www.contao-community.de/showthread.php?22684-Verdrehte-Seitenstruktur-bei-nicht-Adminbenutzer
Gruß
Frank
Download the attachments
Related issues: #2475
--- Originally created by FrankyMUC on August 31st, 2011, at 10:59am (ID 3423)
The text was updated successfully, but these errors were encountered: