علیرضا حسینی
5 سال پیش توسط علیرضا حسینی مطرح شد
9 پاسخ

pagination نتایج جستجو از چندین مدل

سلام ، من از یک پکیج برای سرچ در مدل های متفاوت استفاده میکنم اما یک مشکل داره و اون هم اینکه paginate رو ساپورت نمیکنه!
همه نتایج زیر هم و با type های مختلف لیست میشن! اما نمیشه این هارو صفحه بندی کرد.
در صفحه بندی نتایج راکت که دقت می کنم جناب موسوی از type برای جداسازی نتایج استفاده میکنن! این نمونه کد از نحوه سرچ در آپ بنده هست؟ میشه بگین چطور اون رو paginate کنم؟؟؟

پیاده سازی در مدل مقالات :

    public function getSearchResult(): SearchResult
    {
        $url = route('articles.single', $this->slug);

        return new SearchResult(
            $this,
            $this->title,
            $url
        );
    }

و فانکشن سرچ :

   $searchResults = (new Search())
            ->registerModel(Article::class, 'title')
            ->perform($request->input('query'));
return view('Home.search' , compact('searchResults'));

ثبت پرسش جدید
حسین مبارکیان
تخصص : Javascript and php
@hosseinmobarakian 5 سال پیش آپدیت شد
1

سلام مگه کوئری ها رو به صورت آرایه نمیگیرین؟
خب می تونین صفحه بندی رو به این صورت پیاده کنید.

$page=1;  
$itemCount=20;  
$firstItemNum=$itemCount($page-1);  
for($i=$firstItemNum;$i<itemCount*$page;$i++){  
echo $array[$i];  
}

البته ببخشید کدی که قرار دارم مرتب نیست چون با گوشی نوشتمش.

با یک همچین چیزی راحت میشه انجام داد صفحه بندی رو


علیرضا حسینی
تخصص : برنامه نویس
@alirezahsi 5 سال پیش مطرح شد
0

@hosseinmobarakian
مرسی امتحان می کنم.
منظورم صفحه بندی خود لاراول بود :

 $searchResults = (new Search())
            ->registerModel(Article::class, 'title')->paginate(3);
            ->perform($request->input('query'));
return view('Home.search' , compact('searchResults'));

thrashzone13
تخصص : PHP Laravel Developer
@thrashzone13 5 سال پیش آپدیت شد
1

سلام اگه وارد کد های لاراوا بشین و به paginationدقت کنین میبینین که یه سری توابع هست برای صفخه بندی object ها داره و خودتون میتونین از این توابع برای صفحه بندی هر object حتی به غیر از مدل های eloquent استفاده کنین

    protected function paginate($items, $perPage = 15)
    {
        $currentPage = LengthAwarePaginator::resolveCurrentPage();
        $itemCollection = collect($items);
        $currentPageItems = $itemCollection->slice(($currentPage  $perPage) - $perPage, $perPage)->all();
        $paginatedItems = new LengthAwarePaginator($currentPageItems, count($itemCollection), $perPage);
        $paginatedItems->setPath(request()->fullUrl());

        return $paginatedItems;
    }

این متد میتونه اینکارو براتون انجام بده


علیرضا حسینی
تخصص : برنامه نویس
@alirezahsi 5 سال پیش آپدیت شد
0

@thrashzone13
ممنونم در داکیومنت لاراول خوندم در مورد صفحه بندی دستی ممنون میشم بیشتر توضیح بدین که چگونه کوئری بالا $searchResults که از مدل های متفاوت return میشه رو به این متد پاس بدم و همینطور در مورد نمایش صفحه بندی در blade آیا میشه با جاوا اسکریپت در front یا همون blade فقط صفحه بندی رو انجام داد؟


thrashzone13
تخصص : PHP Laravel Developer
@thrashzone13 5 سال پیش آپدیت شد
0

نتیجه ی جستجوی شما یک آرایه از مدل های مخلفه که وقتی به تابع بالا ارسالش کنین براتون صفحه بندی میکنه و شما خروجی رو به view اراسل میکنین که اونجا هم با استفاده از توابع لاراول میتونین صحفه بندی رو نمایش بدین.اگه منظورتون از جاوااسکریت ساخت یه صفحه spa هست که اون کلا قضی اش فرق داره ولی واسه حالت عادی تابع بالا رو در کنترلر مورد نظر قرار بدین و

return view('Home.search' , ['items' => $this->paginate($searchResults)]);

و در view

{{$items->links()}}

رو قرار بدین


علیرضا حسینی
تخصص : برنامه نویس
@alirezahsi 5 سال پیش آپدیت شد
0

@thrashzone13
ممنونم قرار داده بودم میشه این قسمت رو توضیح بدین چون سه تا پارامتر میگیره slice و داخل phpstorm ایراد میگیره. پارامتر اول خوده آیتم و دوم طول اون و سوم تعداد هرصفحه چیزی که مشاهده کردم.
بازهم متچکرم این پکیج laravel-searchable هست که میتونید تو گیت پیداش کنید،یکی از issue های اصلیش هم همین paginate کردنشه ولی خیلی خوب و راحت بود،اگه حل بشه فوق العادس

slice(($currentPage  $perPage) - $perPage, $perPage)

thrashzone13
تخصص : PHP Laravel Developer
@thrashzone13 5 سال پیش مطرح شد
0

$current باید در $perPage ضرب بشه.علامت ضرب (*) جا افتاده


علیرضا حسینی
تخصص : برنامه نویس
@alirezahsi 5 سال پیش مطرح شد
0

@thrashzone13

عالی بود و یه سری مشکل ایجاد کرد و اون هم چون بصورت گروه گروه از مدل های مختلف می فرستاد با foreach درستش کردم همه چی اکی بود اما چون این پکیج از متد post برای روت search استفاده می کنه وقتی paginate شد وقتی صفحه بعدی رو زدم اخطار method not allowed داد!!؟؟؟ لعنتی خخ :)) چون از طریق تگ a می فرستاد get میشد! نظری نداری در این مورد! سعی کردم دستی بنویسم صفحه بندی و با یک فرم بفرستم اما باز نمیذاشت!


thrashzone13
تخصص : PHP Laravel Developer
@thrashzone13 5 سال پیش مطرح شد
0

معمولا جستجو رو get میزارن حالا نمیدونم به خاطر چی post گزاشتی ولی نه نظری دیگه ندارم =)))


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

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