نسخه:

صفحه بندی

پیکربندی

در چارچوب های دیگر، صفحه بندی می تواند بسیار دردناک باشد. لاراول آن را نسیم می کند. یک گزینه پیکربندی واحد در فایل وجود دارد app/config/view.php . این pagination گزینه مشخص می کند که از کدام نما برای ایجاد پیوندهای صفحه بندی استفاده شود. به طور پیش فرض، لاراول شامل دو نما است.

نمای pagination::slider یک "محدوده" هوشمند از پیوندها را بر اساس صفحه فعلی نشان می دهد، در حالی که pagination::simple نما به سادگی دکمه های "قبلی" و "بعدی" را نشان می دهد. هر دو نما با توییتر بوت استرپ خارج از جعبه سازگار هستند.

استفاده

روش های مختلفی برای صفحه بندی آیتم ها وجود دارد. ساده ترین روش استفاده از paginate روش در سازنده پرس و جو یا مدل Eloquent است.

صفحه بندی نتایج پایگاه داده

$users = DB::table('users')->paginate(15);

توجه: در حال حاضر، عملیات صفحه‌بندی که از یک groupBy دستور استفاده می‌کنند، توسط لاراول قابل اجرا نیستند. اگر نیاز به استفاده از a groupBy با مجموعه نتایج صفحه بندی شده دارید، توصیه می شود که پایگاه داده را به صورت دستی جستجو کنید و از 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>