Pretty Pagination URLs

 

Laravel verwendet für die Pagination URL Out of the box GET-Variablen: ?page=1. Damit aus ?page=1 sowas wie /page/1 wird, konnte ich seitens Laravel keine Lösung finden. Damit ich bei zukünftigen Updates möglichst wenig Probleme habe, verwende ich die Laravel-Pagination mit einer minimalen Übersteuerung: Mit einer zusätzlichen Route, einer Variable die aus der Route die Seitennummer übersteuert und in den Blade-Templates String-Replaces die die Standard-Funktion für das Rendern entsprechend anpassen.

ZjZgAu27GykP3l1sYDbxySU3p9VbkMyRew65WJe5.png

in routes\web.php

bei z.B. folgender Route 

Route::get('topic/{topic}', 'TopicController@index')->name('topic');

zusätzlich eine Zeile für die Pagination:

Route::get('topic/{topic}/page/{page}', 'TopicController@index');
Route::get('topic/{topic}', 'TopicController@index');

Im Controller

    public function show($slug,$page=1)
    {   //Set the current page:
        \Illuminate\Pagination\Paginator::currentPageResolver(function () use ($page) {
        return $page;
        });
        ...

Ab diesem Zeitpunkt können zusätzliche Seiten bereits über die neuen Links aufgerufen werden:

/page/2

Links in den Blade Templates

4hhSEqwHrt6oTwNoGowJLoOdwcKmIttxhoZ7no7K.png

In den Blade-Templates können die Links dann wie folgt angepasst werden:

{!! str_replace("?page=", "/page/",preg_replace("@/page/([0-9]+)@","",str_replace("?page=1\"", "\"",$stories->render()))) !!}	
positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE für deine Bewertung!


veröffentlicht am 31.03.2020 von Bernhard
geändert am 27.05.2020 von Bernhard



Kommentare


Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu. Mehr Details