Hi Marc
Es geht mir darum eine Möglichkeit zu schaffen die Reihenfolge der Seiten einer individuellen Navigation entweder automatisch nach Reihenfolge in Seitenstruktur oder eben manuell zu sortieren. Ich weiß schon, die Methode mit den extra Seiten und normaler Navigation klappt auch, allerdings wäre es so schnittiger und sinniger.
Das lesen der Einträge in der Datenbank geschieht mit folgender Anfrage.
Code:
SELECT id, title, alias, type, hide, protected, published, start, stop FROM tl_page WHERE id IN(7,3,2) ORDER BY FIND_IN_SET(id, '7,3,2')
Hier wollte ich das "ORDER BY FIND_IN_SET" gegen ORDER BY $t.sorting austauschen, deshalb die Frage wie man die core-Klasse überschreiben kann.
Das Endziel könnte hier eine Auswahl in der Palette Menü-Konfiguration sein wie "Sortierung: statisch, Seitenstruktur", bei Statisch wäre eben wie jetzt, bei Seitenstruktur eben das ORDER BY $t.sorting.
Aber das ist mir im Moment zu hoch, ich kapier ja nicht mal wie die Eingabefelder dort in das Backend kommen... geschweige den wie,was oder wo ich überhaupt hinschauen muß.
Die zweite Idee besteht darin, die Sortierung individuell zu sortieren und deshalb in Backend die Liste der ausgewählten Seiten sortierbar zu machen. Das hätte noch den Vorteil, dass man auch nicht an die Reihenfolge in der Seitenstruktur gebunden ist.
Als Beispiel habe ich einen screenshot angehängt und eine kleine js-datei mit einenm Hack. Du hast Doch sicher eine jscript-Konsole an deinem Browser, dann kannst Du es ausprobieren in dem Du die Datei läds. Die Listenpunkte sind dann sortierbar und mit "speichern" ist die Sortierung wie gewünscht.
Ok, man kann keine js Dateien anhängen. Also folgende Zeile als bla.js im root verzeichnis speichern.
Code:
var _SortablePages = function(){
this.valueField = document.id('ctrl_pages');
this.valueField.set('type','text'); // Feld sichtbar machen zur Kontrolle;
this.valueStr = this.valueField.get('value');
if( this.valueStr === '') {
return;
}
this.pageIds = this.valueStr.split(',');
this.list = document.getElement('#target_pages ul');
// Den Listenpunkten die ID der Seite verpassen
this.list.getChildren('li').each(function(el,i){
el.setStyle('cursor','move')
.set('data-pageid', this.pageIds[i]);
},this);
// Reihenfolge der Listenpunkte wieder zurück in das Formularfeld
this.setValue = function() {
var _values = [];
this.list.getChildren().each(function(li){
_values.include(li.get('data-pageid').toInt());
});
this.valueField.set('value',_values.join(','));
};
new Sortables(this.list,{
'onComplete': this.setValue.bind(this)
},this);
};
new _SortablePages();
Im Backend beim Theme ein modul "Individuelle Navigation" aufmachen, paar Seiten zusammenklicken, speichern. Jetzt stehen die Seiten ja schön in der Liste. Jetzt kannst Du das js mal laden um den Effekt zu sehen.
Code:
> Assets.javascript('/bla.js');
Die eigentliche Frage wie schon im Beitrag vorher lautet: wie bekomme ich das Stück js direkt ins Backend rein?
Verstehst Du nun was ich wollte?
Danke.
tschüs, Stefan
Lesezeichen