@Rysl_prog_diz
начинающий программист, веб-разработка, дизайнер

Проблемы с выводом картинок при использованной пагинации?

Здравствуйте уважаемые специалисты. У меня возникла следующая проблема:
Пагинацию для вывода товаров на странице делаю так в контролери:
public function actionView_category_products()
    {
        $id=Yii::$app->request->get('id_category');
        $category=Category::findOne($id);
        if(empty($category)){
            throw new HttpException(404,'Selection of the category does not exist!');
        }


        $request=Products::find()->where(['category_id'=>$id]);
        $pages=new Pagination([
                            'totalCount' => $request->count(),
                            'pageSize'=>9,
                            'forcePageParam'=>false,
                            'pageSizeParam'=>false,
        ]);
        $productss=$request->offset($pages->offset)->limit($pages->limit)->all();

        //mas_print($productss);
        $count_record=$request->count();//передача кількості знайдених товарів
        $this->setMeta('E-Shoper|Category: '.$category->name,$category->keywords,$category->description);
        return $this->render('view_category_products',compact('productss','pages','count_record', 'category'));
    }


в самом виде так:
echo LinkPager::widget([
                                'pagination' => $pages,
                            ]);


Работа с картинками реализована через yii2-images . Где чтобы вывести картинку товара используется следующий код:
$image = $productss->getImage();
 echo $image->getUrl();


Но код $request->offset($pages->offset)->limit($pages->limit)->all(); возвращает в $productss массив, состоящий из массивов, а не объектов.
Прошу подскажите как можно решить эту проблему. В частности интересует как реализовать пагинацию чтобы возвращало массив объектов. Или как не нагружаючы лишними запросами сервер вытянуть картинку. Заранее благодарю всех.
  • Вопрос задан
  • 164 просмотра
Пригласить эксперта
Ответы на вопрос 2
qonand
@qonand
Software Engineer
Не изобретайте велосипед, половина Вашего кода не нужна, если использовать готовый ActiveDataProvider
Ответ написан
Комментировать
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Поддерживаю Максим Федоров на все 100% и добавлю:
возвращает в $productss массив, состоящий из массивов, а не объектов.

не может быть. ->all() возвращает массив объектов. И если Вы действительно получили массив без объектов, то либо где-то затерялся ->asArray или какой-нибудь ArrayHelper::map в afterfind например или еще где-то.
И еще:
$image = $productss->getImage();
echo $image->getUrl();

не должно работать, так как там массив, а не объект, а значит или
$image = $productss[0]->getImage()->getUrl();
или
foreach($productss as $one){
echo $one->getImage()->getUrl();
}

А если Image у Вас еще и связь то:
или
foreach($productss as $one){
echo $one->image->getUrl();
}

или
foreach($productss as $one){
echo $one->getImage()->one()->getUrl();
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы