صفحه بندی
پیکربندی
در چارچوب های دیگر، صفحه بندی می تواند بسیار دردناک باشد.
لاراول آن را نسیم می کند.
یک گزینه پیکربندی واحد در فایل وجود دارد
app/config/view.php
.
این
pagination
گزینه مشخص می کند که از کدام نما برای ایجاد پیوندهای صفحه بندی استفاده
شود.
به طور پیش فرض، لاراول شامل دو نما است.
نمای
pagination::slider
یک "محدوده" هوشمند از پیوندها را بر اساس صفحه فعلی نشان می دهد، در حالی
که
pagination::simple
نما به سادگی دکمه های "قبلی" و "بعدی" را نشان می دهد.
هر دو نما با توییتر بوت استرپ خارج از جعبه سازگار هستند.
استفاده
روش های مختلفی برای صفحه بندی آیتم ها وجود دارد.
ساده ترین روش استفاده از
paginate
روش در سازنده پرس و جو یا مدل Eloquent است.
صفحه بندی نتایج پایگاه داده
$users = DB::table('users')->paginate(15);
توجه: در حال حاضر، عملیات صفحهبندی که از یک
groupBy
دستور استفاده میکنند، توسط لاراول قابل اجرا نیستند. اگر نیاز به استفاده از agroupBy
با مجموعه نتایج صفحه بندی شده دارید، توصیه می شود که پایگاه داده را به صورت دستی جستجو کنید و ازPaginator::make
.
صفحه بندی یک مدل شیوا
همچنین می توانید مدل های Eloquent را صفحه بندی کنید :
$allUsers = User::paginate(15); $someUsers = User::where('votes', '>', 100)->paginate(15);
آرگومان ارسال شده به
paginate
متد تعداد مواردی است که می خواهید در هر صفحه نمایش دهید.
هنگامی که نتایج را بازیابی کردید، می توانید آنها را در نمای خود نمایش
دهید و پیوندهای صفحه بندی را با استفاده از
links
روش زیر ایجاد کنید:
<div class="container"> <?php foreach ($users as $user): ?> <?php echo $user->name; ?> <?php endforeach; ?></div> <?php echo $users->links(); ?>
این تمام چیزی است که برای ایجاد یک سیستم صفحه بندی لازم است! توجه داشته باشید که ما مجبور نبودیم چارچوب صفحه فعلی را اطلاع دهیم. لاراول به طور خودکار این را برای شما تعیین می کند.
اگر میخواهید یک نمای سفارشی برای صفحهبندی مشخص کنید، میتوانید یک View
را به
links
روش ارسال کنید:
<?php echo $users->links('view.name'); ?>
همچنین می توانید از طریق روش های زیر به اطلاعات صفحه بندی اضافی دسترسی داشته باشید:
-
getCurrentPage
-
getLastPage
-
getPerPage
-
getTotal
-
getFrom
-
getTo
-
count
"صفحه بندی ساده"
اگر فقط پیوندهای «بعدی» و «قبلی» را در نمای صفحهبندی خود نشان میدهید،
میتوانید از روش
simplePaginate
برای انجام پرس و جوی کارآمدتر استفاده کنید.
زمانی که نیازی به نمایش اعداد دقیق صفحه در نمای خود ندارید، این برای
مجموعه داده های بزرگتر مفید است:
$someUsers = User::where('votes', '>', 100)->simplePaginate(15);
ایجاد صفحهنماگر به صورت دستی
گاهی اوقات ممکن است بخواهید یک نمونه صفحه بندی را به صورت دستی ایجاد کنید
و مجموعه ای از موارد را به آن ارسال کنید.
می توانید این کار را با استفاده از
Paginator::make
روش زیر انجام دهید:
$paginator = Paginator::make($items, $totalItems, $perPage);
سفارشی کردن URI صفحهنماگر
همچنین میتوانید URI مورد استفاده صفحهکننده را از طریق
setBaseUrl
روش زیر سفارشی کنید:
$users = User::paginate(); $users->setBaseUrl('custom/url');
مثال بالا URL هایی مانند زیر ایجاد می کند: http://example.com/custom/url?page=2
الحاق به پیوندهای صفحه بندی
می توانید با استفاده از
appends
روش صفحه بندی کننده به رشته پرس و جو پیوندهای صفحه بندی اضافه کنید:
<?php echo $users->appends(array('sort' => 'votes'))->links(); ?>
با این کار URL هایی ایجاد می شود که چیزی شبیه به این هستند:
http://example.com/something?page=2&sort=votes
اگر میخواهید یک «پاره هش» به URL صفحهبندی کننده اضافه کنید، میتوانید
از
fragment
روش زیر استفاده کنید:
<?php echo $users->fragment('foo')->links(); ?>
این فراخوانی متد URL هایی را ایجاد می کند که چیزی شبیه به این هستند:
http://example.com/something?page=2#foo
تبدیل به JSON
کلاس قرارداد
Paginator
را اجرا می کند
Illuminate\Support\Contracts\JsonableInterface
و
toJson
روش را آشکار می کند.
همچنین می توانید یک
Paginator
نمونه را با بازگرداندن آن از یک مسیر به JSON تبدیل کنید.
فرم JSON'd نمونه شامل برخی از اطلاعات "متا" مانند
total
,
current_page
,
last_page
,
from
, و
to
.
دادههای نمونه از طریق
data
کلید موجود در آرایه JSON در دسترس خواهند بود.
ارائه دهندگان سفارشی
ارائهدهنده صفحهبندی پیشفرض خارج از جعبه سازگار با بوت استرپ است. با این حال، می توانید این را با ارائه دهنده دلخواه خود سفارشی کنید.
گسترش ارائه دهنده چکیده
کلاس را گسترش دهید
Illuminate\Pagination\Presenter
و متدهای انتزاعی آن را پیاده سازی کنید.
یک مثال ارائه کننده برای بنیاد زورب ممکن است به شکل زیر باشد:
class ZurbPresenter extends Illuminate\Pagination\Presenter { public function getActivePageWrapper($text) { return '<li class="current"><a href="">'.$text.'</a></li>'; } public function getDisabledTextWrapper($text) { return '<li class="unavailable"><a href="">'.$text.'</a></li>'; } public function getPageLinkWrapper($url, $page, $rel = null) { return '<li><a href="'.$url.'">'.$page.'</a></li>'; } }
استفاده از ارائه دهنده سفارشی
ابتدا یک View در
app/views
فهرست خود ایجاد کنید که به عنوان ارائه دهنده سفارشی شما عمل کند.
سپس
pagination
گزینه موجود در
app/config/view.php
فایل پیکربندی را با نام نمای جدید جایگزین کنید.
در نهایت، کد زیر در نمای ارائه دهنده سفارشی شما قرار می گیرد:
<ul class="pagination"> <?php echo with(new ZurbPresenter($paginator))->render(); ?></ul>