DCA: findInSet + options_callback #1914
Comments
Wie lässt sich die Fehlermeldung reproduizeren? Kannst Du bitte ein konkretes Code-Beispiel für die Erweiterung posten? --- Originally created on May 2nd, 2010, at 12:54pm |
Klar. Code aus meiner Turnierpaar-Verwaltung ("Tagebuch einer Extension-Entwicklung" im Forum):
liefert:
Ein Blick an die entsprechende Stelle (DC_Table.php #3468 und davor) zeigt, dass das Argument des implode() nur aus dem Eintrag "options" des entsprechenden Felds erzeugt wird, "options_callback" wird nicht ausgewertet. Mein options_callback tl_gw_meldungen::getACtiveCouples() liefert mir für die pid in Tabelle A einen zusammengesetzten String aus Tabelle B, mit A.pid = B.id. Da der Optionenwert aus mehreren Feldern der Tabelle B berechnet wird, ist ein "einfacher" foreignKey im DCA nicht ausreichend. Wenn nun in der Listview nach dem Feld "pid" sortiert wird, erfolgt die Sortierung nach dem numerischen Wert der pid. Ich hätte gerne die Sortierung nach den Values aus dem options_callback. Wenn ich es richtig verstehe, erlaubt fieldInSet genau das - aber bisher eben nur für hartkodierte "options". Ist das ausreichend als Beschreibung? Danke, --- Originally created by dl1ely on May 2nd, 2010, at 01:13pm |
Nein, leider nicht. Ich kann die Situation anhand dieser Informationen hier nicht nachstellen. Zudem fehlt der Code-Vorschlag für die DC_Table.php. Wie genau sieht die Callback-Funktion aus? Und wie sehen die Tabellen aus? --- Originally created on May 2nd, 2010, at 01:27pm |
OK...Irgendwie finde ich, dass das "Problem" im Code von DC_Table.php deutlich sichtbar ist, aber so ist das ja immer mit subjektiver Sichtweise ;-). Unter http://dl.dropbox.com/u/804662/gw_turnierpaare_20100501.zip gibt es das ZIP meiner Extension, bitte im Modules-Verzeichnis auspacken, dann bitte in gw_turnierpaare/dca/tl_gw_meldungen.php in Zeile 122 "'findInSet' => false" in "'findInSet' => true" ändern. Dann tritt der Fehler beim Aufruf des Backendmoduls "Paarverwaltung->Meldungen" auf. Der options_callback ist genau in derselben Datei definiert, die Tabellenstrukturen der beiden beteiligten Tabellen findest du im database.sql. Einen konkreten Codevorschlag für DC_Table.php habe ich nicht zur Hand, muss mich da erst reindenken. Ich dachte, Featurewünsche könnten vielleicht auch ohne konkrete Implementation geäußert werden ;-). Ich weiss nicht genau, wie der options_callback sicher aufgerufen werden muss. In Pseudocode:
Rest kann IMHO so bleiben. Gerade doch mal eben einen Codevorschlag gebastelt...Statt Zeile 3461 folgendes einfügen:
Macht das, was ich will: Group-Header in List View werden nach dem value statt dem key sortiert, wenn fieldInSet=true ist, und ein options_callback verwendet wird. Nochmal der Code mit mehr Context, ab Zeile 3459:
Stefan --- Originally created by dl1ely on May 2nd, 2010, at 01:47pm |
Implementiert in 79b3a54. --- Originally created on June 3rd, 2010, at 05:00pm |
--- Originally completed on June 3rd, 2010, at 05:00pm |
Hallo!
In Erweiterung von http://dev.typolight.org/issues/299 wäre es schön, wenn findInSet auch mit dem Ergebnis eines options_callback arbeiten könnte, statt nur mit hardkodierten options. Momentan wird in dem entsprechenden Code DC_Table.php (Zeile 3459-3470 in 2.8.3) für findInSet nur "options" ausgewertet. Eine Erweiterung im Stil "falls options_callback gesetzt ist, verwende das Ergebnis des Callback-Aufrufs anstatt des options-Felds" erscheint mir mit wenig Aufwand machbar. Wenn findInSet momentan auf true gesetzt wird, aber keine "options"-Angabe für das Feld existiert, provoziert das eine PHP-Fehlermeldung.
Danke.
Stefan
Related issues: #299, #2079
--- Originally created by dl1ely on May 2nd, 2010, at 12:39pm (ID 1914)
The text was updated successfully, but these errors were encountered: