Am Ende musste ich mir einen Paginator selbst programmieren. Ich poste hier meine Lösung, sollte es jemandem helfen.
Beachten Sie, dass die Lösung, obwohl sie funktional ist, etwas Sorgfalt für den praktischen Gebrauch erfordert (zur Validierung); Die Klasse ist hier vereinfacht, um den Mechanismus hervorzuheben.
<?php namespace App\Services;
use Illuminate\Support\Collection;
use Illuminate\Pagination\BootstrapThreePresenter;
use Illuminate\Pagination\LengthAwarePaginator as BasePaginator;
class Paginator extends BasePaginator{
/**
* Create a new paginator instance.
*
* @param mixed $items
* @param int $perPage
* @param string $path Base path
* @param int $page
* @return void
*/
public function __construct($items, $perPage, $path, $page){
// Set the "real" items that will appear here
$trueItems = [];
// That is, add the correct items
for ($i = $perPage*($page-1) ; $i < min(count($items),$perPage*$page) ; $i++){
$trueItems[] = $items[$i];
}
// Set path as provided
$this->path = $path;
// Call parent
parent::__construct($trueItems,count($items),$perPage);
// Override "guessing" of page
$this->currentPage = $page;
}
/**
* Get a URL for a given page number.
*
* @param int $page
* @return string
*/
public function url($page){
if ($page <= 0) $page = 1;
return $this->path.$page;
}
}
Um die Klasse zu verwenden, können Sie
Route::get('items/{page}','[email protected]');
Dann in der die Steuerung, in getElements
eine Route definieren:
$items = new Paginator(Model::all(),$numberElementsPerPage,url('items'),$page);
Dann können Sie, wie Sie Ihre Elemente entsorgen normalerweise würde. Hinweis: Ich habe eine Pfadoption hinzugefügt, um komplexere hübsche URL-Designs zu integrieren. Hoffe es hilft!
Könnten Sie 'mod_rewrite' verwenden zu konvertieren die URL zur richtigen Abfragezeichenfolge? Konvertiere es intern in 'localhost/ads? Page = 1'. –
@BenHarold Sicher, das würde funktionieren um Links umzuleiten. Allerdings wird es das Problem der Generierung der Links nicht ändern, denke ich. – repptilia