Метод previousPage
Метод previousPage класса WithPagination
осуществляет переход на предыдущую страницу в пагинации.
Метод не принимает параметров и возвращает void.
После вызова метода Livewire автоматически обновляет шаблон компонента,
отображая данные предыдущей страницы.
Синтаксис
<?php
$this->previousPage();
?>
Пример
Давайте создадим компонент со списком пользователей и реализуем переход на предыдущую страницу по клику на кнопку:
<?php
namespace AppLivewire;
use LivewireComponent;
use LivewireWithPagination;
use AppModelsUser;
class UserList extends Component
{
use WithPagination;
public function render()
{
$users = User::paginate(5);
return view('livewire.user-list', [
'users' => $users
]);
}
}
?>
<div>
<button wire:click="previousPage">Previous</button>
<button wire:click="nextPage">Next</button>
<ul>
@foreach ($users as $user)
<li>{{ $user->name }}</li>
@endforeach
</ul>
<span>Page: {{ $users->currentPage() }}</span>
</div>
Результат выполнения кода при нажатии на кнопку "Previous" со второй страницы:
<div>
<button>Previous</button>
<button>Next</button>
<ul>
<li>John Doe</li>
<li>Jane Smith</li>
<li>Bob Johnson</li>
<li>Alice Brown</li>
<li>Charlie Wilson</li>
</ul>
<span>Page: 1</span>
</div>
Пример
Давайте используем метод previousPage внутри другого метода
с дополнительной логикой:
<?php
namespace AppLivewire;
use LivewireComponent;
use LivewireWithPagination;
use AppModelsProduct;
class ProductList extends Component
{
use WithPagination;
public $currentPageDisplay = 1;
public function goToPreviousPage()
{
$this->previousPage();
$this->currentPageDisplay = $this->getPageNumber();
}
private function getPageNumber()
{
$products = Product::paginate(3);
return $products->currentPage();
}
public function render()
{
$products = Product::paginate(3);
return view('livewire.product-list', [
'products' => $products
]);
}
}
?>
<div>
<button wire:click="goToPreviousPage">← Prev</button>
<span>Current page: {{ $currentPageDisplay }}</span>
<ul>
@foreach ($products as $product)
<li>{{ $product->name }} - ${{ $product->price }}</li>
@endforeach
</ul>
</div>
Результат выполнения кода при клике на кнопку "← Prev":
<div>
<button>← Prev</button>
<span>Current page: 1</span>
<ul>
<li>Laptop - $1200</li>
<li>Phone - $800</li>
<li>Tablet - $500</li>
</ul>
</div>
Пример
Давайте добавим проверку на наличие предыдущей страницы перед вызовом метода:
<?php
namespace AppLivewire;
use LivewireComponent;
use LivewireWithPagination;
use AppModelsArticle;
class ArticleList extends Component
{
use WithPagination;
public $canGoBack = false;
public function previous()
{
$articles = Article::paginate(4);
if ($articles->currentPage() > 1) {
$this->previousPage();
}
$this->updateCanGoBack();
}
private function updateCanGoBack()
{
$articles = Article::paginate(4);
$this->canGoBack = $articles->currentPage() > 1;
}
public function render()
{
$articles = Article::paginate(4);
$this->canGoBack = $articles->currentPage() > 1;
return view('livewire.article-list', [
'articles' => $articles
]);
}
}
?>
<div>
@if ($canGoBack)
<button wire:click="previous">Back</button>
@else
<button disabled>Back</button>
@endif
<ul>
@foreach ($articles as $article)
<li>{{ $article->title }}</li>
@endforeach
</ul>
</div>
Результат выполнения кода на первой странице:
<div>
<button disabled>Back</button>
<ul>
<li>Introduction to Laravel</li>
<li>Livewire Basics</li>
<li>Advanced PHP</li>
<li>Database Design</li>
</ul>
</div>
Смотрите также
-
метод
nextPage,
который осуществляет переход на следующую страницу -
метод
resetPage,
который сбрасывает пагинацию на первую страницу -
метод
setPage,
который устанавливает конкретную страницу пагинации -
класс
WithPagination,
который предоставляет методы для работы с пагинацией