Seiten Pagination bei Extension

In diesem Forum gibt es Starthilfe zum neuen Extension-System von phpBB 3.1/3.2. Fragen zur Entwicklung von Extensions und zur Konvertierung von phpBB 3.0.x MODs sind ebenfalls willkommen.
Benutzeravatar
Kirk
Supporter
Supporter
Beiträge: 5407
Registriert: 24.05.2010 08:31
Kontaktdaten:

Seiten Pagination bei Extension

Beitragvon Kirk » 08.08.2017 11:20

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>

Benutzeravatar
oxpus
Ehemaliger
Beiträge: 5065
Registriert: 03.02.2003 12:33
Wohnort: Bad Wildungen
Kontaktdaten:

Re: Seiten Pagination bei Extension

Beitragvon oxpus » 08.08.2017 12:51

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.
Grüße
OXPUS
Kein Support bei unaufgeforderten PNs, E-Mails oder auf anderem Weg!!

Benutzeravatar
Kirk
Supporter
Supporter
Beiträge: 5407
Registriert: 24.05.2010 08:31
Kontaktdaten:

Re: Seiten Pagination bei Extension

Beitragvon Kirk » 08.08.2017 18:13

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.

Benutzeravatar
oxpus
Ehemaliger
Beiträge: 5065
Registriert: 03.02.2003 12:33
Wohnort: Bad Wildungen
Kontaktdaten:

Re: Seiten Pagination bei Extension

Beitragvon oxpus » 08.08.2017 19:16

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.
Grüße
OXPUS
Kein Support bei unaufgeforderten PNs, E-Mails oder auf anderem Weg!!

Benutzeravatar
Kirk
Supporter
Supporter
Beiträge: 5407
Registriert: 24.05.2010 08:31
Kontaktdaten:

Re: Seiten Pagination bei Extension

Beitragvon Kirk » 08.08.2017 20:27

Leider wird nach dieser Änderung in viewtopic nach wie vor ein Link zur nächsten Seite dieser Extension angezeigt.

Benutzeravatar
oxpus
Ehemaliger
Beiträge: 5065
Registriert: 03.02.2003 12:33
Wohnort: Bad Wildungen
Kontaktdaten:

Re: Seiten Pagination bei Extension

Beitragvon oxpus » 09.08.2017 07:50

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.
Grüße
OXPUS
Kein Support bei unaufgeforderten PNs, E-Mails oder auf anderem Weg!!

Benutzeravatar
Kirk
Supporter
Supporter
Beiträge: 5407
Registriert: 24.05.2010 08:31
Kontaktdaten:

Re: Seiten Pagination bei Extension

Beitragvon Kirk » 09.08.2017 11:55

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.

Benutzeravatar
oxpus
Ehemaliger
Beiträge: 5065
Registriert: 03.02.2003 12:33
Wohnort: Bad Wildungen
Kontaktdaten:

Re: Seiten Pagination bei Extension

Beitragvon oxpus » 09.08.2017 13:37

??? 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.
Grüße
OXPUS
Kein Support bei unaufgeforderten PNs, E-Mails oder auf anderem Weg!!

Benutzeravatar
Kirk
Supporter
Supporter
Beiträge: 5407
Registriert: 24.05.2010 08:31
Kontaktdaten:

Re: Seiten Pagination bei Extension

Beitragvon Kirk » 09.08.2017 17:20

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.

Benutzeravatar
oxpus
Ehemaliger
Beiträge: 5065
Registriert: 03.02.2003 12:33
Wohnort: Bad Wildungen
Kontaktdaten:

Re: Seiten Pagination bei Extension

Beitragvon oxpus » 09.08.2017 22:03

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...
Grüße
OXPUS
Kein Support bei unaufgeforderten PNs, E-Mails oder auf anderem Weg!!


Zurück zu „Extension Bastelstube“