محسن صادقی
6 سال پیش توسط محسن صادقی مطرح شد
5 پاسخ

صفحه بندی کامنت ها در سطح بندی کامنت ها تا بینهایت

سلام
توی درس های اشتراک گذاری ویدیو با لاراول بخش سطح بندی کامنت ها تا بینهایت level توضیح داده شده .
جناب موسوی اگر لطف کنید و نحوه صفحه بندی کردن (pagination) کامنت ها را هم بفرمائید.
متشکرم.
منظورم این درس هست
https://roocket.ir/series/video-sharing-project-with-laravel/episode/20


ثبت پرسش جدید
علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 6 سال پیش مطرح شد
1

متد paginate هم روی کالکشن‌های لاراول موجوده و هم در الکوئنت. هنگامی که میخواهید comment هارو به view پاس بدید . چیزی شبیه مثال زیر:

$comments = Comment::paginate(10);
return view('yourview.blade.php', compact('comments'));

محسن صادقی
تخصص : برنامه نویس
@sadeqi 6 سال پیش آپدیت شد
0

سلام متشکرم از پاسخ شما
این روش رو بلد بودم اگر اون درس رو ببینید کل مجموعه نظرات در قالب یک helper function قرار گرفته و خروجی اون هم یک string هست

    function commentdiscussion( Discussion $discussion , $parentId ='0' )
    {
        $comments = $discussion->commentdiscussions()->where('parent_id', $parentId)->get();
        if(count($comments) <= 0) {
            return null;
        }
        $commentBody = '';
        foreach ($comments as $comment)
        {
            $commentBody .='';
            $commentBody .='<div class="row no-gutters border">';
            $commentBody .='<div class="col-3 color rigchlightyellowtwo item text-center">';
            $commentBody .='</div>';
            $commentBody .='</div><br>';
            $commentBody .='<div class="blog-comment margin-left-comment">' . commentdiscussion($discussion, $comment->id) . '</div>';
        }
        return $commentBody;
    }

خروجی توی blade هم

{!! commentdiscussion($discussion) !!}

توی همچین حالتی میخوام که paginate داشته باشه

البته من برای کوتاه شدن جواب بخشی از function رو حذف کردم که فقط مساله رو عنوان کرده باشم


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 6 سال پیش مطرح شد
0

@sadeqi
در همین هلپر که شما دارید استفاده میکنید ، دارید از مدل Discussion استفاده میکنید و این مدل از Eloquent ORM ارث‌بری میکنه. و این باعث میشه بتونید بجای متد get از paginate استفاده کنید; به کد زیر دقت کنید:

function commentdiscussion( Discussion $discussion , $parentId ='0' )
{
    $comments = $discussion->commentdiscussions()->where('parent_id', $parentId)->paginate(2);
    if(count($comments) <= 0) {
        return null;
    }
    $commentBody = '';
    foreach ($comments as $comment)
    {
        $commentBody .='';
        $commentBody .='<div class="row no-gutters border">';
        $commentBody .='<div class="col-3 color rigchlightyellowtwo item text-center">';
        $commentBody .='</div>';
        $commentBody .='</div><br>';
        $commentBody .='<div class="blog-comment margin-left-comment">' . commentdiscussion($discussion, $comment->id) . '</div>';
    }
    $commentBody .= '<div>'. $comments->links() .'</div>';
    return $commentBody;
}

محسن صادقی
تخصص : برنامه نویس
@sadeqi 6 سال پیش مطرح شد
0

متشکرم . این روش درست کار میکنه به شرطی که کلاس رو برای لود زیر شاخه ها مجدد صدا نکنیم منظورم این خط هست

$commentBody .='<div class="blog-comment margin-left-comment">' . commentdiscussion($discussion, $comment->id) . '</div>';

وقتی این تابع رو صدا میزنیم توی شمارش تعداد صفحات به مشکل میخوره


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 6 سال پیش مطرح شد
0

به حالت زیر هم میتونید امتحان کنید:

    $comments = $discussion->commentdiscussions()->where('parent_id', $parentId);
    if ($parentId == 0) {
        $comments = $comments->paginate(2);
    }
    else {
        $comments = $comments->get();
    }

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام