Ergebnis 1 bis 5 von 5

Thema: Individuelle Navigation sortieren

  1. #1
    Contao-Nutzer
    Registriert seit
    16.08.2012.
    Beiträge
    41

    Standard Individuelle Navigation sortieren

    Hallo Leute

    Wenn ich eine individuelle Navigation habe, anschließend die Reihenfolge der Seiten ändere, ändert sich die Navigation nicht. Ich muß also zum Modul, den "Seiten auswählen" Dialog öffen, "Anwenden" drücken, Modul speichern und erst dann sind die Seiten wieder sortiert wie unter Seitenstruktur angezeigt.

    Habe ich was übersehen oder ist das immer so? Danke.

    adios, Stefan

  2. #2
    Contao-Yoda Avatar von MacKP
    Registriert seit
    15.06.2009.
    Ort
    Duisburg
    Beiträge
    13.292
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hallo stefan der zweite,
    da hast du nichts übersehen, das ist extra so. Im Grunde friert man sich mit der Individuellen Navigation einen bestimmten Zustand ein, der dann auch bleibt, bis man das expliziet ändern will.
    Deswegen nutze ich für sowas möglichst niemals die Individuelle Navigation, sondern eher die Normale, mit extra Seiten, die nur Weiterleitungen sind oder so. Baut man zwar etwas mühseliger auf im ersten Schritt, aber in der Pflege find ich das einfach nur angenehm.

    Viele Grüße
    Contao Pool | C-C-A | MetaModels | [Internetseite -> Mediendepot Ruhr]
    [Arbeitet bei -> Paus Design & Medien]
    "I can EXPLAIN it to you, but I can't UNDERSTAND it for you."

  3. #3
    Contao-Nutzer
    Registriert seit
    16.08.2012.
    Beiträge
    41

    Standard

    Hi Marc,

    Hallo stefan der zweite,
    hehe "Stefan" reicht, so würdevoll muß nicht sein, gab halt schon "den ersten" hier.
    [...] sondern eher die Normale, mit extra Seiten,[...]
    Das Vorgehen kommt mir bekannt vor :-)

    Wenn ich das ändern möchte fallen mir zwei Wege ein.

    1. Bei der Datenbankabfrage (Stichwort: "ORDER BY $t.sorting") oder
    2. "halb-automatisch" durch das ändern des Wertes des Feldes "pages" in den Modul-Einstellungen (z.B. mit einer "sortable"-Liste).

    zu 1. Was wäre der Weg die zuständige Klasse zu überschreiben?
    zu 2. Das wäre wohl unaufwendiger den es würde nur ein Stück js brauchen. Nur wie bekomme ich das in den Quelltext der Modulseite?

    Wenn es Dir nicht zuviel ist, kannst du mir gerne ein paar Stichworte/Dateinamen liefern. Das wäre toll. Danke!

    adios, Stefan

  4. #4
    Contao-Yoda Avatar von MacKP
    Registriert seit
    15.06.2009.
    Ort
    Duisburg
    Beiträge
    13.292
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hallo stefan der zweite (das macht keine Mühe, das ist copy & paste, also viel einfacher als TIppen *g*),

    ich weiß jetzt gar nicht was du damti meinst...

    Hier noch mal ein Link zu ner kleinen Übersicht, was man mit der normalen Navi so alles machen kann: http://de.contaowiki.org/ModulNavigation
    Was ich dann noch oft nutze, ist ganz unten beschrieben bei Template Anpassungen (4. Ebene weg). Das nutze ich zum Teil mit eigenen Klassen um in speziellen Navigationen nicht alle Links anzeigen zu lassen oder das ganze doch noch mal anders zu Handhaben.

    Viele Grüße
    Contao Pool | C-C-A | MetaModels | [Internetseite -> Mediendepot Ruhr]
    [Arbeitet bei -> Paus Design & Medien]
    "I can EXPLAIN it to you, but I can't UNDERSTAND it for you."

  5. #5
    Contao-Nutzer
    Registriert seit
    16.08.2012.
    Beiträge
    41

    Standard

    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
    Angehängte Grafiken Angehängte Grafiken

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •