Logo for Parsclick
توجه: سایت برای مدت چند روز از تاریخ ۱۸ نوامبر از کار خواهد افتاد...

صفحه بندی ایجکس با Pjax در لاراول ۵,۲

  بهروز ولیخانی بهروز ولیخانی
  June 29, 2016 at 3:50 PM
  ۹ تیر، ۱۳۹۵ ساعت ۱۵:۵۰

pjax-laravel


سلام ، امروز با آموزش صفحه بندی ایجکسی (Ajax Pagination) در لاراول ۵٫۲ در خدمتتون هستیم ، که خیلی کاربردی هست و شاید برای شما هم پیش افتاده باشه که بخواید صفحه بندی های وب سایتتون رو به صورت ایجکس پیاده سازی کنید و از هر بار رفرش برای بروزرسانی صفحه جلوگیری کنید .

صفحه بندی ایجکس با Pjax در لاراول


خب در اینجا ما تصمیم داریم که از کتابخانه جیکوئری Pjax استفاده کنیم که در ادامه یک توضیح کوتاهی درمورد Pjax  خواهم داد که کارش چیه و به چه دردی میخوره .

کتابخانه جیکوئری Pjax چیست ؟ 

pjax پلاگینی است خوب برای کار با pushState و ajax که کار با آن نیز ساده است. روش استفاده از آن بدین شکل است که در سمت کلاینت کافی است به لینک‌هایی که می‌خواهید با pjax لود شود، کلاس خاصی بیفزایید و سپس یک خط کد بنویسد که لینک‌هایی با فلان کلاس، به وسیله pjax لود شود. در سمت سرور نیز تنظیم کوچکی لازم است که اگر هدر x-pjax ارسال شده بود، صفحه را بدون فریم ارسال کند.

 

روش استفاده از Pjax در پروژه لاراول :


گام اول : ابتدا برای اطلاعات بیشتر میتونید به سایت گیت هاب مراجعه کنید : defunkt/jquery-pjax و از امکانات و آپشن های این کتابخانه مطلع شوید .

در ادامه ابتدا باید فایل jquery.pjax.js  رو دانلود و در پروژه خود اضافه کنید .
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.pjax/1.9.6/jquery.pjax.js" type="text/javascript"></script>

نکته : حتما از وجود کتابخانه jquery.js در پروژه خود اطمینان حاصل کنید در غیر اینصورت با مشکل روبه رو خواهید شد .


گام دوم : حالا باید یک تگ اسکریپت رو باز کنید و درون کد زیر را قرار دهید :
<script type="text/javascript">$(document).pjax('.pagination li a', '#pjax-container');</script>

در ادامه توضیح میدم که id و  class که باید قرار بدیدم در کد بالا به چه شکل هست .

خب تا اینجای کار ما کتابخانه Pjax رو به پروژه اضافه کردیم حالا باید بریم به سراغ Controller مون و کدهایی که میخوام جهت صفحه بندی کردن اطلاعات قرار بدیم .

فایل CategoryController.php :
public function index()
{
$categories = Category:: paginate(10);
return view('Categories.index')->with('categories',$categories);
}

در خط اول یک متغیر  داریم به نام category$  که داخلش داره از مدل Category اطلاعات رو دریافت میکنه و با استفاده از (۱۰)paginate  تعداد آیم های قابل نمایش در هر صفحه رو مشخص میکنه و در خط پایینشم داریم view مربوطه رو به همراه متغیر category$ برمیگردونیم.

گام سوم :  حالا باید به فایل View  مورد نظر بریم و کدهای مربوط به نمایش محتویات صفحه رو درون یک حلقه foreach قرار بدیم و در نهایت pagination  مون رو رندر کنیم .

فایل index.blade.php :
<div class="container" id="pjax-container">
<div class="table-scrollable" >
<table class="table table-hover table-light" >
<thead>
<tr>
<th> # </th>
<th> نام دسته </th>
<th> فعالیت </th>
<th> وضعیت </th>
<th> تاریخ</th>
</tr>
</thead>
<tbody>
@foreach($categories as $category)
<tr>
<td>{{ $category->id }}</td>
<td>{{ $category->name }}</td>
<td>{{ $category->active }}</td>
<td>{{ $category->created_at}}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
{{ $categories->links() }}
</div>

خب همین طورکه پیداست ما با استفاده یک حلقه foreach داریم اطلاعات رو داخل جدولی که داریم چاپ میکنیم و همچنین با استفاده از {{ ()categories->links$ }} صفحه بندی خودمون رو نمایش میدیم .

اما بریم سراغ چند نکته کلید که یادآور شده بوددم توضیح بدم :

  1. همون طور که عرض کردم در بالا کار pjax لود اطلاعات در صفحه در یک قسمت مشخص هستش که بدون رفرش صحفحه اطلاعات رو به صورت ایجکسی بروزرسانی میکنه ، که ما در اینجا باید به کلاس container مون یک آیدی با نام id="pjax-container" اضافه کنیم و این رو به Pjax معرفی کنیم که قرار این قسمت از صفحه مون بروزرسانی بشه .

  2. مورد بعدی اینکه در اسکریپت بالا ما گفتیم که Pjax بیاد و تگ های a  موجود در کلاس pagination رو در نظر بگیره ، و زمانی که کلیک شد درخواست ها رو به صورت ایجکسی برای ما ارسال کنه .


نکته ۲ : حتما کد {{ ()categories->links$ }} رو داخل کلاس container  تون قرار بدید و گرنه pjax کار نخواهد کرد و صفحه شما رفرش خواهد شد .  :cry:


نکته ۳ : هیچ لزومی نداره که اسم کلاس و یا ایدی تون حتما مطابق نام گزاری بالا باشه و از هرنام دلخواهی میتوانید استفاده کنید فقط در نظر داشته باشید که هرنامی برای ایدی تون در نظر گرفتید باید در اسکریپت بالا هم همون نام رو در نظر بگییرید .


 

گام چهارم : فقط یک قدم دیگر تا نتیجه کار باقی  است ، که شما باید یک سری تنظیمات داخل سروتون انجام بدید بدین شکل که شما باید ابتدا فایل PjaxMiddleware رو که پیوست کردم در پایین مقاله دانلود کنید و داخل پوشه : app/Http/Middleware

کپی کنید و در آخر باید کلاس PjaxMiddleware رو در فایل kernel.php  در مسیر app/Http/Kernel.php اضافه کنید : 
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\App\Http\Middleware\PjaxMiddleware::class, // این خط اضافه شود
],

'api' => [
'throttle:60,1',
],
];

خب به همین راحتی شما توانستید صفحه بندی خودتون رو توسط Pjax ایجکسی کنید ، لازم به ذکر که شما میتونید از Pjax در بخش های مختلف دیگه پروژه تون هم استفاده کنید و این سرعت سایت شما رو به صورت قابل چشم گیری بالا میبره ، صرفا ما در این مقاله برای اینکه صفحه بندی ایجکسی داشته باشیم بدین شکل استفاده کردیم . حالا میتونید به صفحه مورد نظر مراجعه کنید و نتیجه را ملاحظه کنید .


فایل پیوست : PjaxMiddelware.zip


منبع : www.studio-design.ir