Где формируется $wa->shop->productSet ? Есть решение
Не могу найти место где формируется $wa->shop->productSet. Мне надо, что бы туда попадали все картинки товара (точнее еще одна). Изначально там только id основной.
Собственно хотел на главной сделать при hover на картинку, смену изображения на второе. Решил написать helper, который будет выводить:
<img src="урл картинки" data-image="url второй картинки" >
Но столкнулся с гемороем, что в $wa->shop->productSet id только одной картинки. Делать лишние запросы в базу не хочется. Хотелось бы расширить выборку, которая попадает в productSet, так как она потом кешируется.
Эта тема в архиве. Добавление комментариев к ней отключено.










7 ответов
/wa-apps/shop/lib/classes/shopViewHelper.class.php
Это понятно. Вопрос был, где там формирование массива. Но уже сделал. Не уверен, что это допустимо, так что, уважаемые профи, скажите насколько правильным методом будет добавления следующего в shopViewHelper.class.php
public function productSetWithImg($set_id, $offset = null, $limit = null, $options = array()) { if (!$offset && !$limit && !$options && ($cache = $this->wa->getCache())) { $route = $this->getRoute(); $cache_key = 'set_'.$set_id.'_'.str_replace('/', '_', waRouting::clearUrl($route['domain'].'/'.$route['url'])); $products = $cache->get($cache_key, 'sets'); if ($products !== null) { return $products; } } $products = $this->products('set/'.$set_id, $offset, $limit, $options); foreach ($products as $key=>$one) { $products[$key]['images'] = []; $model = new shopProductImagesModel(); foreach($model->select('id','product_id','sort') ->where('product_id = '.(int)$one['id']) ->order('sort ASC') ->fetchAll() as $img){ $products[$key]['images'][] = $img['id']; } } if (!empty($cache)) { $cache->set($cache_key, $products, 1200, 'sets'); } return $products; }Не надо так. Это примерно 30+ лишних запросов к базе. Блок foreach убрать.
Получить изображения можно если передать параметр в getProducts.
$collection = new shopProductsCollection("set/bestsellers");
$collection->getProducts("*,images");
Спасибо
Остается только вопрос что будет после обновления. Я так понимаю, все перезапишется. Стоит вынести все это в пользовательский helper? Можно ли его унаследовать от shopViewHelper.class.php или есть другой способ дергать его методы?
Вынести в пользовательский хелпер и дергать его.
Вынес, но кеш не работает:
class shopCustom { public static function getProductList($set_id, $offset = null, $limit = null, $options = array()) { if ($cache = wa('shop')->getCache('default')){ $products = $cache->get('ProductList_'.$set_id, 'sets'); if ($products !== null) { return $products; } } $collection = new shopProductsCollection('set/'.$set_id, null); $products = $collection->getProducts('*,images', 0, null, true); if (!empty($cache)) { $cache->set('ProductList_'.$set_id, $products, 1200, 'sets'); } return $products; } }