PDA

View Full Version : pagination



هزاره سوم
چهارشنبه 16 مهر 1393, 14:07 عصر
سلام
میخواستم برای سایتم بخش pagination رو درست کنم ..
آموزش های سایت لاراول رو دیدم و این متدش رو ..



$allUsers = User::paginate(15);



اما این به کار من نمیاد.
پس توی نت بیشتر گشتم و این کد رو پیدا کردم که باید توی view قرار بگیره..



$allUsers = User::paginate(15);<?php
$presenter = new Illuminate\Pagination\BootstrapPresenter($paginato r);
?>

<?php if ($paginator->getLastPage() > 1): ?>
<ul class="pagination">
<?php echo $presenter->render(); ?>
<li>
m <!-- some mystical code will go here -->
</li>
</ul>
<?php endif; ?>




اما این ارور رو میده ...
undefined variable paginator

ni.alpr
چهارشنبه 16 مهر 1393, 18:02 عصر
چرا اون متد به درد شما نمی خوره ؟

برای مثال می خواید توی هر صفحه 10 تا User نشون بدید :

توی کنترلر :


$users = User::Paginate(10);
return View::make('users.index')->withUsers($users);


یا مثلا اگه order خاصی می خواید اول order می کنید بعد paginate می کنید.


$users = User::orderBy('created_at','DESC')->paginate(10);
return View::make('users.index')->withUsers($users);


بعد توی view هم




<ul>
@foreach($users as $user)
<li>{{ $user->username }}</li>
@endforeach
</ul>
{{$users->links()}}


قسمت $users->links() لینک صفحه هارو برای شما تولید می کنه و هماهنگ با Bootstrap هست . شما می تونید source صفحه رو ببینید و مطابق به اون style رو هم عوض کنید.

ni.alpr
چهارشنبه 16 مهر 1393, 18:09 عصر
کلاسی که شما دارید اون بالا می سازیدش Illuminate\Pagination\BootstrapPresenter دقیقا همین paginate هست . قرار نیست شما منطق برنامتون رو به view ببرید. بزارید هر قسمت درگیر کارای خودش باشه .

هزاره سوم
چهارشنبه 16 مهر 1393, 20:04 عصر
چرا اون متد به درد شما نمی خوره ؟

برای مثال می خواید توی هر صفحه 10 تا User نشون بدید :

توی کنترلر :


$users = User::Paginate(10);
return View::make('users.index')->withUsers($users);


یا مثلا اگه order خاصی می خواید اول order می کنید بعد paginate می کنید.


$users = User::orderBy('created_at','DESC')->paginate(10);
return View::make('users.index')->withUsers($users);


بعد توی view هم




<ul>
@foreach($users as $user)
<li>{{ $user->username }}</li>
@endforeach
</ul>
{{$users->links()}}


قسمت $users->links() لینک صفحه هارو برای شما تولید می کنه و هماهنگ با Bootstrap هست . شما می تونید source صفحه رو ببینید و مطابق به اون style رو هم عوض کنید.



اینجوری فقط ۱۰ تا از اون اطلاعات میاد بیرون.. مثلا واسه جدول یوزر .. ۱۰ تا یوزر میاد .. من میخوام همش بیاد .. نمیدونم متوجه شدین یا نه

این عکس رو ببینید

124371

توی هر صفحه ۱۰ تا قرار میگیره ..

xcodex
چهارشنبه 16 مهر 1393, 22:27 عصر
با سلام
دوست عزیز متوجه نمیشم همش بیاد یعنی چی ؟

توی این عکسی هم که شما گذاشتید همش نیومده فقط صفحه 6 ام لود شده . paginate بر اساس شماره پیجی که بهش میدید داده های اون پیج رو واستون لود میکنه همینطور که این پیج asp که گذاشتید هم همین کار رو میکنه. همونطور که ni.alpr گفتن شما میتونی لینک ها رو پایین تیبل بیاری که دقیقا مثل همین عکس شما میشه و میتونی بین پیج ها حرکت کنی .

هزاره سوم
پنج شنبه 17 مهر 1393, 02:24 صبح
با سلام
دوست عزیز متوجه نمیشم همش بیاد یعنی چی ؟

توی این عکسی هم که شما گذاشتید همش نیومده فقط صفحه 6 ام لود شده . paginate بر اساس شماره پیجی که بهش میدید داده های اون پیج رو واستون لود میکنه همینطور که این پیج asp که گذاشتید هم همین کار رو میکنه. همونطور که ni.alpr گفتن شما میتونی لینک ها رو پایین تیبل بیاری که دقیقا مثل همین عکس شما میشه و میتونی بین پیج ها حرکت کنی .

من فکر میکردم عددی که درون تابع paginator قرار میگیره تعداد داده هایی ست که از دیتابیس میخونه..
میشه در مورد این تابع بیشتر توضیح بدید؟

xcodex
پنج شنبه 17 مهر 1393, 07:23 صبح
من فکر میکردم عددی که درون تابع paginator قرار میگیره تعداد داده هایی ست که از دیتابیس میخونه..
میشه در مورد این تابع بیشتر توضیح بدید؟

ببخشید جمله من اشتباه برداشت شد از طرف شما . عددی که به paginate داده میشه تعداد رکوردهایی هست که شما میخواید توی یک صفحه داشته باشید . مثلا شما میخوایید در هر صفحه فقط 10 رکورد نمایش داده بشه . پس میتونید اینجوری بگید :


$users = User::paginate(10)



با این کار شما میتونید لوپ انجام بدید و 10 داده اول رو توی صفحه نشون بدید. برای نشون دادن لینک بقیه پیج ها میتونید از


{{$users->links()}}

استفاده کنید و این رو اکو کنید زیره تیبل رکوردها توی view تون. حالا روی هر شماره پیجی کلیک کنید 10 رکورد از اون پیج نمایش داده میشه.

امیدوارم مطلب رو رسونده باشم .

شما اولین پست ni.alpr رو ببینید همون کد رو اجرا کنید ببینید نتیجه میگیرید

هزاره سوم
پنج شنبه 17 مهر 1393, 10:12 صبح
ممنون از توضیحات شما و دوست بالا..
کد رو کپی پیست کردم .. فکر کنم روی این قسمت مشکل داره و ارور میده .. چون وقتی این بخش رو پاک کردم رکورد ها رو نشون داد .. ولی وقتی گذاشتم ارور اومد ..


{{$users->links()}}





ارور



Method Illuminate\View\View::__toString() must not throw an exception


این کد بخش Route :


Route::get('/pagination',function()
{
$some = Education::paginate(5);
return View::make('pagination')->with('some',$some);
});


این کد بخش ویوووو :


<?php foreach ($some as $user): ?>
<?php echo $user->title; ?>
<?php endforeach; ?>


<?php echo $some->links(); ?>

ni.alpr
پنج شنبه 17 مهر 1393, 12:39 عصر
Method Illuminate\View\View::__toString() must not throw an exception

این اکسپشن اعصاب خورد کننده ترین هست ، پیدا کردن مشکل خیلی وقتا آدم رو کلافه می کنه .

من که مشکل رو توی کدهای شما نمی بینم.

راستی پیشنهاد می کنم از template engine استفاده کنید ، view رو خیلی مرتب تر می کنه و دیدن مشکل خیلی ساده تر میشه.

هزاره سوم
پنج شنبه 17 مهر 1393, 13:04 عصر
بله همیشه از tamplate engine استفاده میکنم.. این بار استثنا همین جوری کد زدم...
پس به نظرتون مشکل از چی میتونه باشه ؟ :ناراحت: من چه کنم؟؟

ni.alpr
پنج شنبه 17 مهر 1393, 17:44 عصر
یه نسخه ی تازه از لاراول رو بسازید ، کدهاتون رو هم با اسمای مشخص تر بزنید و امتحان کنید . یا اینکه پروژه رو آپلود کنید تا یه نگاه بهش بندازم

هزاره سوم
پنج شنبه 17 مهر 1393, 18:41 عصر
این کد مربوط به Route :


Route::get('/pagination',function()
{
$some = Education::paginate(5);
return View::make('pagination')->with('some',$some);
});


این کد مربوط به pagination.blade.php


@foreach($some as $somes)
{{ $somes->title }} <br />
@endforeach

{{ $some->links() }}




این ارور :



Method Illuminate\View\View::__toString() must not throw an exception


دیگه چیزی که مربوط به این بخش باشه نیست

هزاره سوم
جمعه 18 مهر 1393, 08:11 صبح
مشکل حل شد!!
ولی علت :
تنظیمات رو ظاهرا قبلا تغییر داده بودم و یادم نبود دوباره درستش کنم!! :افسرده::عصبانی++::عصبانی++:
بخش app/config/view رو تغییر داده بودم!!
:اشتباه: