Seite 1 von 2

Seiten Pagination bei Extension

Verfasst: 08.08.2017 11:20
von Kirk
Hallo
Ich bin gerade drüber den Mod Custom BBCodes Page von Stoker in eine EXT umzuwandeln.
Im ACP Modul kann man z.b. einstellen wieviele BBCodes pro Seite angezeigt werden sollen, sind es mehr als 1 Seite wird die Seiten Pagination angezeigt mit Link zur nächsten Seite.
Allerdings wird mir dies auch in viewtopic mit Link zur nächsten Seite dieser Extension angezeigt, obwohl es nur einen Beitrag gibt. [ externes Bild ]
Innerhalb dieser Extension funktioniert alles wie es soll.
Ich komm nicht dahinter wo der Fehler liegt, die listener.php kann man sich in Pastebin ansehen.
In der html Datei ist es so eingebunden:

Code: Alles auswählen

   <div class="pagination">
      {TOTAL_BBCODES}
      <!-- IF .pagination -->
         <!-- INCLUDE pagination.html -->
      <!-- ELSE -->
         &bull; {PAGE_NUMBER}
      <!-- ENDIF -->
   </div>

Re: Seiten Pagination bei Extension

Verfasst: 08.08.2017 12:51
von oxpus
Hallo Kirk,

Code: Alles auswählen

   $this->pagination->generate_template_pagination = $this->helper->route('kirk_bbcodes_page');
   $pagination_url = $this->helper->route('kirk_bbcodes_page');

ist so nicht für Extensions vorgesehen.

Wenn müsstest du diesen Code verwenden:

Code: Alles auswählen

$pagination = $this->phpbb_container->get('pagination');
$pagination->generate_template_pagination(
    array(
        'routes' => array(
            'kirk_bbcodes_page',
            'kirk_bbcodes_page',
        ),
        'params' => array(),
    ), $this->helper->route('kirk_bbcodes_page') . 'pagination', 'start', $total_bbcodes, $this->config['bbcodes_per_page'], $start);


Wobei ich jetzt hoffe, nichts vergessen zu haben.
Hinter "params" kannst du noch weitere Parameter einfügen, wenn du die verwenden willst. Ansonsten die Zeile einfach weg lassen.

Ggf. macht es auch Sinn, den Codeblock mittels Bedingung zu überspringen.
Also nur auszulösen bei

Code: Alles auswählen

if ($total_bbcodes > $this->config['bbcodes_per_page'])


Und zuletzt sind dann diese Zeilen auch überflüssig:

Code: Alles auswählen

            'PAGINATION'               => $this->pagination->generate_template_pagination($pagination_url, 'pagination', 'start', $total_bbcodes, $this->config['bbcodes_per_page'], $start),
            'PAGE_NUMBER'               => $this->pagination->on_page($total_bbcodes, $this->config['bbcodes_per_page'], $start),


Zuletzt noch ein Hinweis:
Es kann eher sein, dass $start die "Seitenzahl" beinhaltet, die aufzurufen ist.
Daher wäre diese umzurechnen, da ja nicht z. B. Seite 2 = Datensatz 2 ist sondern ggf. Datensatz 16 (bei 15 Sätzen je Seite).
Ich hatte das so gelöst:

Code: Alles auswählen

      $page_start = max($start - 1, 0) * $this->config['bbcodes_per_page'];
      $start = $page_start;

Und somit kann ich $start im Pagination Block durch $page_start ersetzen.
Einfach ausprobieren, was besser klappt.

Re: Seiten Pagination bei Extension

Verfasst: 08.08.2017 18:13
von Kirk
Hi oxpus
Danke für die Rückmeldung, wenn ich das (hatte dies in der Art bei der ext mchat gefunden):

Code: Alles auswählen

   $this->pagination->generate_template_pagination = $this->helper->route('kirk_bbcodes_page');
   $pagination_url = $this->helper->route('kirk_bbcodes_page');


durch jenes ersetze:

Code: Alles auswählen

$pagination = $phpbb_container->get('pagination');
$pagination->generate_template_pagination(
    array(
        'routes' => array(
            'kirk_bbcodes_page',
            'kirk_bbcodes_page',
        ),
    ),
   $this->helper->route('kirk_bbcodes_page') . 'pagination', 'start', $total_bbcodes, $this->config['bbcodes_per_page'], $start);


Diese Zeilen entferne

Code: Alles auswählen

            'PAGINATION'               => $this->pagination->generate_template_pagination($pagination_url, 'pagination', 'start', $total_bbcodes, $this->config['bbcodes_per_page'], $start),
            'PAGE_NUMBER'               => $this->pagination->on_page($total_bbcodes, $this->config['bbcodes_per_page'], $start),

bekomme ich auf der EXT Seite folgende Fehlermeldung:
[phpBB Debug] PHP Warning: in file [ROOT]/phpbb/template/context.php on line 574: array_merge() [function.array-merge]: Argument #1 is not an array
[phpBB Debug] PHP Warning: in file [ROOT]/phpbb/template/context.php on line 148: Invalid argument supplied for foreach()


Was das hier angeht $start = request_var('start', 0); ersetzt man 0 z.b. durch 1 wird erst ab den 2. BBCode der im ACP eingetragen ist, in dieser EXT angezeigt.
Wenn ich es durch deinen Code ersetze, hat dies keinerlei Auswirkungen.
Füge ich das:

Code: Alles auswählen

      if ($total_bbcodes > $this->config['bbcodes_per_page'])
      {

nach:

Code: Alles auswählen

   public function display_bbcodes_page($event)
   {

ein, so wird auf der Extseite angezeigt das es keine Einträge gibt, als währen keine BBCodes im ACP angelegt.

Re: Seiten Pagination bei Extension

Verfasst: 08.08.2017 19:16
von oxpus
Nicht ganz.
Versuche es mal so:

Code: Alles auswählen

   if ($total_bbcodes > $this->config['bbcodes_per_page'])
   {
         $page_start = max($start - 1, 0) * $this->config['bbcodes_per_page'];
         $start = $page_start;
    
        $pagination = $this->phpbb_container->get('pagination');
      $pagination->generate_template_pagination(
         array(
            'routes' => array(
               'kirk_bbcodes_page',
               'kirk_bbcodes_page',
            )
         ), 'pagination', 'start', $total_bbcodes, $this->config['bbcodes_per_page'], $page_start);

      $this->template->assign_vars(array(
         'PAGE_NUMBER'   => $pagination->on_page($total_bbcodes, $this->config['bbcodes_per_page'], $page_start),
         'TOTAL_DL'      => $this->language->lang('VIEW_BBCODES', $total_bbcodes),
      ));
   }

Also dieser Block soll die beiden Zeilen

Code: Alles auswählen

   $this->pagination->generate_template_pagination = $this->helper->route('kirk_bbcodes_page');
   $pagination_url = $this->helper->route('kirk_bbcodes_page');

ersetzen; nach der SQL-Abfrage der insgesamt vorhandenen BBCodes.

Re: Seiten Pagination bei Extension

Verfasst: 08.08.2017 20:27
von Kirk
Leider wird nach dieser Änderung in viewtopic nach wie vor ein Link zur nächsten Seite dieser Extension angezeigt.

Re: Seiten Pagination bei Extension

Verfasst: 09.08.2017 07:50
von oxpus
Hast du jetzt den Listener so eingesetzt, wie er aktuell im Pastbin zu finden ist?
Du musst schon die Zeilen

Code: Alles auswählen

   $this->pagination->generate_template_pagination = $this->helper->route('kirk_bbcodes_page');
   $pagination_url = $this->helper->route('kirk_bbcodes_page');

und

Code: Alles auswählen

            'PAGINATION'               => $this->pagination->generate_template_pagination($pagination_url, 'pagination', 'start', $total_bbcodes, $this->config['bbcodes_per_page'], $start),
            'PAGE_NUMBER'               => $this->pagination->on_page($total_bbcodes, $this->config['bbcodes_per_page'], $start),

löschen, sonst wird ja weiterhin die falsche Pagination angezeigt.

Dazu wäre auch zu prüfen, welche Werte $total_bbcodes und $this->config['bbcodes_per_page'] haben.
Wenn $total_bbcodes nur 1 ist, dürfte nichts angezeigt werden.

Re: Seiten Pagination bei Extension

Verfasst: 09.08.2017 11:55
von Kirk
Habe es so eingetragen wie du geschrieben hast, siehe neue listener.php
oxpus hat geschrieben:Dazu wäre auch zu prüfen, welche Werte $total_bbcodes und $this->config['bbcodes_per_page'] haben.Wenn $total_bbcodes nur 1 ist, dürfte nichts angezeigt werden.


Wenn im ACP bei "Anzahl der BBCodes pro Seite" der eingetrage Wert über den $total_bbcodes liegt, wird nur die Anzahl der BBCodes angezeigt.

Re: Seiten Pagination bei Extension

Verfasst: 09.08.2017 13:37
von oxpus
??? Die Seiten sollen doch nur dann angezeigt werden, wenn mehr BBCodes vorhanden sind, als auf eine Seite sollen.
Sonst wäre das Pagination doch unsinnig.
Also wenn $this->config['bbcodes_per_page'] z. B. 15 und $total_bbcodes kleiner ist, werden anstatt der Seiten klar nur die Gesamtzahl der enthaltenen Datensätze (hier also die Anzahl BBCodes) angezeigt.
Und das wird in deinem Listener durch die Zeile

Code: Alles auswählen

            'TOTAL_BBCODES'               => ($total_bbcodes == 1) ? $this->user->lang['BBCODE_COUNT'] : sprintf($this->user->lang['BBCODES_COUNT'], $total_bbcodes),

gemacht.
Entfernst du diese Zeile ebenfalls, verschwindet die gesamte Anzeige und wird erst wieder dargestellt, wenn mehr BBCodes vorhanden sind, als auf eine Seite sollen.

Re: Seiten Pagination bei Extension

Verfasst: 09.08.2017 17:20
von Kirk
oxpus hat geschrieben:??? Die Seiten sollen doch nur dann angezeigt werden, wenn mehr BBCodes vorhanden sind, als auf eine Seite sollen.Sonst wäre das Pagination doch unsinnig.

Das tut es ja auch aber nicht nur auf der Ext Seite sondern auch in viewforum und viewtopic.

Re: Seiten Pagination bei Extension

Verfasst: 09.08.2017 22:03
von oxpus
Dann lass einfach die Bedingung weg und die Anzeige erscheint wie überall.

Ich fände es besser, wenn sie nur erscheint, wenn auch mehr als eine Seite anzuzeigen ist.
Aber das ist Geschmacksache...