Здравствуйте! Прошу помочь с выводом похожих товаров в списках товаров.
Небольшое описание СУТИ:
На сайте имеется 2 категории товаров: НАБОРЫ и БЛЮДА. Продаваться будут только НАБОРЫ, которые состоят из 3-5 БЛЮД.
Т.е. сначала добавляем N-количество БЛЮД в каталог с определенными характеристиками (вес, рецепт, время приготовления и т.д.)
Затем добавляем НАБОР, например НАБОР КЛАССИЧЕСКИЙ, и в него через «похожие товары» добавляем 3-5 из БЛЮД, указываем у НАБОРА некоторые характеристики (кол-во персон, …) и указываем цену за НАБОР.
В каталоге необходимо выводить только НАБОРЫ, т.к. их продаем, а БЛЮДА будут отображаться только как состав набора, т.е. через «похожие товары».
На данный момент необходимо, чтобы на главной странице выводились только НАБОРЫ с указанием НАЗВАНИЯ, ЦЕНЫ, ХАРАКТЕРИСТИК и с отображением БЛЮД вместе с их параметрами. Т.е. получается, что в списке товаров (НАБОРОВ) у каждого товара еще и его «похожие товары» отображались.
Вывод товаров только категории НАБОРЫ сделал путем указания атрибута cat_id в шаблонном теге вывода блока некоторых товаров
<insert name="show_block" module="shop" count="4" images="1" sort="date" cat_id="10" >
ТЕПЕРЬ ВОПРОС - Как вывести у каждого НАБОРА в этом блоке на главной странице список его БЛЮД?
Обращался в ТП… ребята помогают, НО т.к. я только начинаю работать с этой CMS… и долгое время работал с другой системой, то сложно пока вникнуть… поэтому еще и сюда пишу. Надеюсь, что на форуме больше советчиков будет :) да и думаю, что решение этой задачи пригодится в будущем кому нибудь.
Вот что ответила ТП, и как я пытался реализовать это, но не вышло пока:
Тег show_block_rel работает только с текущим товаром. ID товара он берет из переменной $this->diafan->_route->show. Можно добавить к тегу дополнительный атрибут, например shop_id, который подставлять вместо переменной $this->diafan->_route->show в функции show_block_rel() в shop.model.php. И нужно убрать ограничение "блок выводиться только для страницы товара" - в show_block_rel() shop.php.
После уточняющих от меня вопрос поступили следующие ответы:
- Если Вы выводите этот блок внутри блока товаров, то в шаблоне у Вас выводиться цикл по товарам foreach($result["rows"] as $row){...}. И ID товара внутри этого цикла - $row["id"].
- Сначала вызывается функция show_block_rel в shop.php в ней Вы получите shop_id в виде $attributes["shop_id"]. Затем это значение передавайте в аналогичную фунцию в shop.model.php. В функции show_block_rel нужно заменить и другие упоминания $this->diafan->_route->show на принятый атрибут.
- Ограничение в контроллере функция show_block_rel в shop.php. Смотрите код: if ($this->diafan->_site->module != "shop" || ! $this->diafan->_route->show)
return false;
Вот что сделано мною по данным указаниям:
1. В shop.php в функции show_block_rel в строке $attributes = $this->get_attributes(…); в конце добавил shop_id:
$attributes = $this->get_attributes($attributes, 'count', 'images', 'images_variation', 'template', 'shop_id');
и ниже прописал:
$shop_id = $attributes["shop_id"];
2. Также в файле shop.php временно закомментировал ограничение
//if ($this->diafan->_site->module != "shop" || ! $this->diafan->_route->show)
// return false;
3. Затем в файле shop.model.php в функции show_block_rel в конце добавил $shop_id:
public function show_block_rel($count, $images, $images_variation, $param, $shop_id)
затем вместо "good_id" => $this->diafan->_route->show указал "good_id" => $shop_id,
и еще в двух местах ниже в данной функции $this->diafan->_route->show заменил на $shop_id
4. Далее в файле shop.view.show_block.php …
Там где выводится название товара вместо NAME указал ID… - это так… для теста… действительно отображается ID товара… вернул на место NAME…
Далее… после вывода названия и ссылки товара вставил строку с тегом вывода похожих товаров:
echo $this->htmleditor('<insert name="show_block_rel" module="shop" count="10" images="1">');
Результата естественно нет, т.к. не указан атрибут shop_id. Теперь в тег добавляем атрибут shop_id:
echo $this->htmleditor('<insert name="show_block_rel" module="shop" count="10" images="1" shop_id="102">');
(указал вручную ID товара… для теста)
В результате НИЧЕГО! Пробовал вместо 102 указать $row["id"] - тоже без результата.
В общем выходит, что я что то не доделал или не так делаю. Подскажите что не верно?
Заранее СПАСИБО!
P.S. Прошу сильно не ругать за столь большой текст, т.к. пытался полностью изложить, чтобы всё понятно было... и не ругать за такие вопросы, т.к. человек новый в данной системе... трудновато перестроиться с другой, на которой долго очень работал... НО видно, что данная CMS довольно хороша и гибка, только теперь нужно изучать и делать :)