ProcessWire - Pagination
Siehe auch
ProcessWire - $input Variable https://processwire.com/docs/front-end/how-to-use-url-segments/#page-numbers-and-url-segments
Seitenbrowser und Teilausgabe von PageArrays
Man benötigt den Pagebrowser, wenn man nur einen Teil der Ergebnisse einer Suche ausgeben möchte. Z.B. die Ergebnisse 15-20 von den gefundenen Posts.
Man muss also einmal den Pagebrowser selbst ausgeben, aber auch den richtigen Bereich der Ergebnisse.
Seitenbrowser / Pagebrowser in ProcessWire erzeugen
- Die Seitenzahl wird automatisch an die URL gehängt. Dazu muss man im Template aber die Pagination erlauben (Abschnitt URLs).
- Das Markup für die Ausgabe des PageBrowsers wird automatisch erzeugt. Man kann es aber auch anpassen (s.u.).
https://processwire.com/api/modules/markup-pager-nav/
Beispiele
Kindseiten (z.B. Blog Einträge) auflisten
// override some standard pager settings
$pagerOptions = array(
'listMarkup' => "<ul class='uk-pagination'>{out}</ul>",
);
$posts = page()->children('limit=10');
$pagination = $posts->renderPager($pagerOptions);
// output pagination
echo ($pagination)
/*
* Note that the render() method above is from the MarkupPageArray plugin module.
* It does nothing more than iterate through the provided pages and make an unordered list,
* optionally with pagination.
Ausgabe des Suchbereichs
Nach einer Suche hat man i.d.R. ein PageArray. Von diesem möchte man den passenden Ergebnisbereich ausgeben. Dazu gibt es hilfreiche Funktionen.
Im Standardfall, z.B. nach einer Suche mit find() muss man nicht viel beachten. Wenn man mit einem Selector etwas sucht berücksichtigt ProcessWire automatisch den Ergebnisbereich. Dazu setzt es im PageArray die Eigenschaften limit und start. Wenn man das PageArray mit foreach durchgeht werden automatisch die richtigen Ergebnisse ausgegeben.
Beachte: Du solltest beim Selektor dennoch ein limit mitgeben.
$results = $pages->find("id>1, limit=10, sort=title");
$pagination = $results->renderPager();
echo $pagination;
echo "<ul>";
foreach($results as $result) {
echo "<li><a href='{$result->url}'>{$result->title}</a></li>";
}
echo "</ul>";
Manchmal hat man ein selbsterzeugtes PageArray. Z.B. wenn man mehrere Suchergebnisse zu einem kombiniert. Hier muss man start und limit selbst setzen. Im Beispiel ist $postCollector ein selbst erzeugtes PageArray, in dem mehrere Suchergebnisse per ->add hinzugefügt werden.
<syntaxhighlight lang="php"> // ... // adding results to postCollector $selector = "template=post, opt_1=0, date_begin<=$toTs, date_begin>=$fromTs, sort=-date_begin"; $otherPostCollector->add( pages($selector) ); $otherPostCollector->sort('-date_begin'); $postCollector->add($otherPostCollector);
bd($input,'input vars'); $start = ($input->pageNum - 1) * $postsLimit; $postCollector->setLimit($postsLimit); $postCollector->setStart($start); //bd($postCollector,'postCollector Posts'); foreach($postCollector as $p){
// render each post
}