Heim  >  Artikel  >  Backend-Entwicklung  >  Informationen zum PHP-Framework Laravel-Plug-in-Paginierungsmethode zur Implementierung benutzerdefinierter Paging

Informationen zum PHP-Framework Laravel-Plug-in-Paginierungsmethode zur Implementierung benutzerdefinierter Paging

不言
不言Original
2018-06-13 15:58:432241Durchsuche

In diesem Artikel werden hauptsächlich relevante Informationen zum PHP-Framework Laravel5.1-Plug-in Pagination zur Implementierung von benutzerdefiniertem Paging vorgestellt

Das Paginieren von Laravel ist sehr praktisch und eigentlich recht einfach zu erweitern. Nehmen wir ein Beispiel und erweitern die Methoden paginate() und simplePaginate(), um unseren benutzerdefinierten Paging-Stil zu implementieren, z. B. die Anzeige von „vorherige Seite“ und „nächste Seite“ anstelle von „《“ und „》“. Sobald Sie die Erweiterungsmethode beherrschen, können Sie ein gewünschtes Paging skrupellos erweitern, z. B. durch Springen zu einer bestimmten Seite, Anzeigen der Gesamtzahl der Datensätze im Paging, des aktuell angezeigten Datensatzbereichs usw. . .

5.1 und 5.2 sollten die gleiche Methode sein. Ich verwende hier Version 5.2. Aus der Dokumentation geht hervor, dass Paginator dem Abfrage-Builder und der simplePaginate-Methode von Eloquent entspricht, während LengthAwarePaginator der Paginate-Methode entspricht. Dann schauen wir uns den Quellcode an, insbesondere wie paginate render() implementiert,

Illuminate/Pagination/LengthAwarePaginator.php

Was wird in
<?php

namespace Illuminate\Pagination;

......

class LengthAwarePaginator extends AbstractPaginator implements Arrayable, ArrayAccess, Countable, IteratorAggregate, JsonSerializable, Jsonable, LengthAwarePaginatorContract 
{
......
  public function render(Presenter $presenter = null)
  {
    if (is_null($presenter) && static::$presenterResolver) {
      $presenter = call_user_func(static::$presenterResolver, $this);
    }

    $presenter = $presenter ?: new BootstrapThreePresenter($this);

    return $presenter->render();
  }
......
}
übergeben

render() ist eine Instanz von Presenter, und die instanziierte Render-Methode wird aufgerufen, um die Paging-Anzeige zu realisieren. Wenn nicht, rufen Sie render() in BootstrapThreePresenter auf, um zu sehen, was BootstrapThreePresenter tut

Illuminate/Pagination/BootstrapThreePresenter.php

<?php

namespace Illuminate\Pagination;

use Illuminate\Support\HtmlString; 
use Illuminate\Contracts\Pagination\Paginator as PaginatorContract; 
use Illuminate\Contracts\Pagination\Presenter as PresenterContract;

class BootstrapThreePresenter implements PresenterContract 
{
  use BootstrapThreeNextPreviousButtonRendererTrait, UrlWindowPresenterTrait;

  /**
   * The paginator implementation.
   *
   * @var \Illuminate\Contracts\Pagination\Paginator
   */
  protected $paginator;

  /**
   * The URL window data structure.
   *
   * @var array
   */
  protected $window;

  /**
   * Create a new Bootstrap presenter instance.
   *
   * @param \Illuminate\Contracts\Pagination\Paginator $paginator
   * @param \Illuminate\Pagination\UrlWindow|null $window
   * @return void
   */
  public function __construct(PaginatorContract $paginator, UrlWindow $window = null)
  {
    $this->paginator = $paginator;
    $this->window = is_null($window) ? UrlWindow::make($paginator) : $window->get();
  }

  /**
   * Determine if the underlying paginator being presented has pages to show.
   *
   * @return bool
   */
  public function hasPages()
  {
    return $this->paginator->hasPages();
  }

  /**
   * Convert the URL window into Bootstrap HTML.
   *
   * @return \Illuminate\Support\HtmlString
   */
  public function render()
  {
    if ($this->hasPages()) {
      return new HtmlString(sprintf(
        &#39;<ul class="pagination">%s %s %s</ul>&#39;,
        $this->getPreviousButton(),
        $this->getLinks(),
        $this->getNextButton()
      ));
    }

    return &#39;&#39;;
  }
......
}

Hier können Sie sehen, dass BootstrapThreePresenter die Schnittstelle von PresenterContract implementiert. Der erste Parameter PaginatorContract im Konstruktor ist tatsächlich ein Paginator. Welche Methoden sind in der Presenter-Schnittstelle definiert und müssen implementiert werden?

Es definiert die Render- und hasPages-Methoden, die implementiert werden müssenOkay, jetzt ist uns ganz klar: Wenn wir die Paging-Anzeige anpassen möchten, müssen wir unseren eigenen Presenter schreiben, um ihn zu implementieren Die darin enthaltenen Schnittstellen render() und hasPages() reichen aus.

Zuerst implementieren wir einfach eine paginate(), um „vorherige Seite“ und „nächste Seite“ anzuzeigen, mit einem Beispiel für Paginierungszahlen in der Mitte.

Die neue Datei lautet wie folgt (persönliche Gewohnheit)

app/Foundations/Pagination/CustomerPresenter.php

<?php

namespace Illuminate\Contracts\Pagination;

interface Presenter 
{
  /**
   * Render the given paginator.
   *
   * @return \Illuminate\Contracts\Support\Htmlable|string
   */
  public function render();

  /**
   * Determine if the underlying paginator being presented has pages to show.
   *
   * @return bool
   */
  public function hasPages();
}

So einfach ist das, vor allem die render()-Methode. Wenn Sie den Paging-Stil ändern oder Paging-Sprünge in das Projekt einfügen müssen, schreiben Sie einfach die HTML-Elemente in jeder Anzeigemethode neu Muss auch in der Blade-Vorlage korrigiert werden. Unser Paginator heißt beispielsweise so:

{!! }

Geändert zu unserer benutzerdefinierten Paginierungsanzeige:

{!! with(new AppFoundationsPaginationCustomerPresenter($categories))->render() !!}

Okay, jetzt sollten Sie auf der Seite sehen können, dass die Paging-Links den Stil „Vorherige Seite“ und „Nächste Seite“ sowie Zahlen enthalten.

Was ist, wenn Sie simplePaginate erweitern? Erben Sie einfach den CustomerPresenter und rendern Sie ihn so, wie ich ihn oben gesehen habe Beispiel: Wir ändern es in „Vorheriger Artikel“ und „Nächster Artikel“. >
Paginierungsanzeige:

{!! 🎜>Die Methode ist diese Methode, spezifische Modifikationen. Schreiben Sie einfach die entsprechende Methode zum Anzeigen von HTML-Elementen entsprechend Ihren eigenen Anforderungen neu.
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

Seiten- und Formularvalidierung in Laravel 4

So lösen Sie das Problem des Drossel-Middleware-Fehlers von Laravel

Das obige ist der detaillierte Inhalt vonInformationen zum PHP-Framework Laravel-Plug-in-Paginierungsmethode zur Implementierung benutzerdefinierter Paging. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn