Problem mit Pagination

  • Hi,
    ich habe in der com_content/featured/ die pagination auf $this->pagination->getPaginationLinks() umgestellt um ein Override anlegen zu können.
    Soviel ich weiß kann man von $this->pagination->getPagesLinks() keine vernünftigen Overrides anlegen.


    Nun hab ich aber das Problem das die Seitenlinks nicht funktionieren.
    Bei der getPagesLinks() Ausgabe hab ich im href z.B. /?start=56 stehen. Im getPaginationLinks() steht dort nur ein # und dann gibt es ein onClick mit z.B:
    document.adminForm.limitstart.value=56; Joomla.submitform();return false;


    Aber da wird die Seite nur einfach neugeladen. So wie ich das sehe wird an das hiddeninputfield ein value übergeben.
    In der Konsole wird der Fehler

    Zitat

    Uncaught TypeError: Cannot read property 'limitstart' of undefined

    ausgegeben.
    Was fehlt den hier?


    Ich glaub aber das ich hier was komplett falsch mache.
    Also wie mache ich ein vernünftigen Override der Pagination?
    Ich würde gerne für eine Mobile Darstellung eine Selectbox anzeigen lassen und auch ein paar andere Anpassungen müssen vorgenommen werden.


    Viele Grüße

  • Für die JLayouts link.php und links.php, die mit getPaginationLinks gezogen werden, musst Overrides anlegen und die eben so ausformulieren, dass das Form-Kram ersetzt wird. Das hidden input z.B. brauchst nur in Listenansichten (Backend z.B.), wo ein Formular vorhanden ist. Genauso das onclick, limitstart usw.
    Eigenntlich musst nur paar Stellen löschen und dein ?start=20 usw. einsetzen.


    getPaginationLinks() kannst aber auch ein eigenes JLayout übergeben, wennst eh was neues erfinden willst.
    getPaginationLinks('mein.pagination.layout', ...


    Ich habs seinerzeit ganz anders gemacht, weil das ganze Pagination-Gedöns sowieso bisher nicht so perfekt ist ( = teils extrem verwirrend) und für Dropdown eh vieles nicht benötigt wird.


    Im Override Featured-Blog statt der Pagination-Zeile

    Code
    JLayoutHelper::render('ghsvs.pagination_dropdown', array('pagination' => $this->pagination));


    Dann im Template eine Datei html/layouts/ghsvs/pagination_dropdown.php


    Ist für Bootstrap 3 und hab ich schon lange nicht mehr reingeschaut, ob man was verbessern könnte/sollte.
    "Bewundern" kann man diese Seitennavigation hier ghsvs.de/programmierer-schnipsel/joomla
    Eine Pagination unten auf der Seite und eine per JQuery geklonte oben auf der Seite. Oder umgekehrt? Weiß nicht mehr. Egal.
    EDIT: Ja, ist schon bisschen unbeholfenes Krimpelkrampel im Code, seh ich gerade ;) z.B. das ganze $options-Getue am Anfang.

  • Alles, was sich in dem Array bei Aufruf des Layouts befindet

    Code
    JLayoutHelper::render('ghsvs.pagination_dropdown', array( 'pagination' => $this->pagination, 'options' => array('color' => '#abc', 'align' => 'right', 'dieses' => 'jenes'), 'wasanderes' => $wasanderes, ));


    kannst du im JLayout abgreifen via

    Code
    $displayData


    , was in diesem Fall ebenfalls ein Array ist.
    $displayData['pagination' ], $displayData['options' ] usw.


    Muss aber nicht Array sein. Auch das ginge


    Code
    JLayoutHelper::render('ghsvs.pagination_dropdown', $this->pagination);


    Dann ist $displayData im Layout gleich $this->pagination.


    Bleibt also dir überlassen, was du als $displayData übergibst, ob du das 'align' direkt als Array-Key verwendest und auf 'options' verzichtest oder oder und und.


    In meinem Code-Bsp. habe ich die options bei der Übergabe halt weggelassen. Im Layout berücksichtige ich sie, weil sie an anderer Stelle, wo ich das JLayout rendere, eben Sinn machen. Und, ob man mit Registry arbeitet oder nicht, ist von Fall zu Fall Geschmackssache. Hätte man auch mit isset($options['align']) usw. machen können. Halt meist umständlicher z.B. einen Defaultwert zu setzen...


    Kurz: Bist da relativ frei was du in $displayData versteckst und wie du das dann im JLayout abwickelst.


    Kannst auch das ganze $this überreichen, wenns noch mehr hilfreiche Daten enthält

    Code
    JLayoutHelper::render('ghsvs.pagination_dropdown', $this);


    Im JLayout dann z.B.
    $pagination = $displayData->pagination;
    $params = $displayData->params;
    usw.