Simpla 2.0: сгенерированные связанные товары
Дата: 06 Фев ' 12 Автор: mart Рубрики: Программирование
Продолжая тему расширения функционала магазина, реализованного на движке Симпла. Программный код реализован под вторую версию системы, но логика, заложенная в код применима и к первой версии движка.
Благодаря тому, что автор системы разделил систему на ядро и отображение мы можем достаточно безболезненно внести правки в код.
Итак, открываем файл view/ProductView.php и в районе 144 строки находим код
143 144 | $this->design->assign('related_products', $related_products); } |
И сразу после закрывающей скобки добавить систему генерации связанных товаров из той же категории, что и сам товар
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 | else { // генерируемые связанные товары $products->categories = $this->categories->get_categories(array('product_id'=>$product->id)); $category = reset($products->categories); $related_products = array(); $after = false; $products = $this->products->get_products(array('category_id' => $category->id, 'limit' => 100, 'in_stock'=>1, 'visible'=>1)); foreach($products as $p) { if($after && count($related_products) < 6) $related_products[$p->id] = $p; elseif($p->id == $product->id) $after = true; } if(count($related_products) < 6) foreach($products as $p) if($p->id != $product->id && count($related_products) < 6) $related_products[$p->id] = $p; else break; $related_products_images = $this->products->get_images(array('product_id'=>array_keys($related_products))); foreach($related_products_images as $related_product_image) if(isset($related_products[$related_product_image->product_id])) $related_products[$related_product_image->product_id]->images[] = $related_product_image; $related_products_variants = $this->variants->get_variants(array('product_id'=>array_keys($related_products), 'instock'=>true)); foreach($related_products_variants as $related_product_variant) { if(isset($related_products[$related_product_variant->product_id])) { $related_product_variant->price *= (100-$discount)/100; $related_products[$related_product_variant->product_id]->variants[] = $related_product_variant; } } foreach($related_products as $r) { $r->image = &$r->images[0]; $r->variant = &$r->variants[0]; } $this->design->assign('related_products', $related_products); } // end: генерируемые связанные товары |
Логика заключается в том, что мы выбираем весь товары из категории (в скрипте есть ограничение в 100, если у Вас больше — увеличьте на предполагаемых длину). Скрипт выбирает связанный товар (6 штук), которые идут после данного товара. При достижении конца списка скрипт добирает нехватку ихз начала списка. Таким образом список связанных товар фиксированный до тех пока не внесут изменения в каталог.
P.S. Как обычно реквизиты для «благодарностей» справа — надо же как-то развивать систему.
26 комментариев
-
Игорь
06|Фев|2012 1Вопрос — как сделать чтобы Скрипт выбирал не связанный товар (6 штук), которые идут после данного товара. а выбирал РАНДОМНО товар из категории в которой находится товар
-
06|Фев|2012
2
Касательно рандомности — писалось в предыдущей статье. Здесь ставилась целью верность с точки зрения поисковиков касательно контента, т.к. если Вы будете выдавать каждый раз новые сопутствующие товары, то и контент страницы будет меняться.
-
Игорь
06|Фев|2012 3Товары добавляются, но выдает ошибки:
Notice: Undefined variable: category in Z:\home\simpla.ru\www\view\ProductView.php on line 142
Notice: Trying to get property of non-object in Z:\home\simpla.ru\www\view\ProductView.php on line 142Warning: Cannot modify header information — headers already sent by (output started at Z:\home\simpla.ru\www\view\ProductView.php:142) in Z:\home\simpla.ru\www\view\ProductView.php on line 210
Warning: Cannot modify header information — headers already sent by (output started at Z:\home\simpla.ru\www\view\ProductView.php:142) in Z:\home\simpla.ru\www\index.php on line 26
Simpla 2.0.2 (тестю на локале)
-
06|Фев|2012
4
Исправил код… Обратите внимание на первые 2 строчки в условии. Должно с новые кодом работать без проблем.
-
12
06|Фев|2012 5А если у товара уже выбраны руками, допустим 3 товара? Дополнит до 6? или еще 6 насыпет?
-
07|Фев|2012
6
Именно этот код сделан для тех у кого нет связанных товаров — клиент так просил. Т.е. те товары, которые он хотел продвигать — он сам вписывал — у остальных попросил генерацию.
-
Игорь
06|Фев|2012 7Насчет рандомности — решил следующим образом — сделал вывод 100 товаров и прицепил jQwery карусель на вывод — выводит по 6 товаров и листается 🙂
-
Игорь
06|Фев|2012 8Чтото я не увидел изменений 🙁 — нельзя ли подробнее, что изменить ? (ошибка по прежнему есть …)
-
07|Фев|2012
9
Строка 146 и 147 в коде.
-
Игорь
07|Фев|2012 10/ Строка 146 и 147 в коде/ Заработало! 🙂 Спасибо
-
Stepa
09|Мар|2012 11Warning: Attempt to assign property of non-object in /home/errors/domains/balda.org.ua/public_html/view/ProductView.php on line 198
Warning: reset() [function.reset]: Passed variable is not an array or object in /home/errors/domains/balda.org.ua/public_html/view/ProductView.php on line 200
Warning: Cannot modify header information — headers already sent by (output started at /home/errors/domains/balda.org.ua/public_html/view/ProductView.php:198) in /home/errors/domains/balda.org.ua/public_html/view/ProductView.php on line 216
Warning: Cannot modify header information — headers already sent by (output started at /home/errors/domains/balda.org.ua/public_html/view/ProductView.php:198) in /home/errors/domains/balda.org.ua/public_html/index.php on line 18
Выдает такую ошибку при добавление.
Версия 2.0.2 -
Дмитрий
19|Апр|2012 12Приветствую.
Всё работает, но у меня стоит вывод цены у связанных, он выводит ту цену у них, что и у просматриваемого товара, т.е. у всех одну и ту же, которая не совпадает с настоящей… Что можно сделать?
-
Cos
02|Май|2012 13под 2.1 работает?
-
Саша
06|Май|2012 14В последний версии Симплы этот модель у меня так и не заработал((( В чем может быть проблема?
-
Евгений
18|Май|2012 15на версии simpla 2.0.2 работает с выводом сверху ошибок:
Warning: Attempt to assign property of non-object in Z:\home\localhost\www\simpla\view\ProductView.php on line 196
Warning: Attempt to modify property of non-object in Z:\home\localhost\www\simpla\view\ProductView.php on line 198
Warning: reset() expects parameter 1 to be array, null given in Z:\home\localhost\www\simpla\view\ProductView.php on line 198
Warning: Cannot modify header information — headers already sent by (output started at Z:\home\localhost\www\simpla\view\ProductView.php:196) in Z:\home\localhost\www\simpla\view\ProductView.php on line 214
Warning: Cannot modify header information — headers already sent by (output started at Z:\home\localhost\www\simpla\view\ProductView.php:196) in Z:\home\localhost\www\simpla\index.php on line 18
-
Павел
16|Авг|2012 16Подскажите как подключить jQwery карусель на вывод?!
-
Anton
05|Сен|2012 17Подскажите, как сделать тоже самое, только вывести все товары в которых есть ТЭГ (который забит в товаре) т.е. таким образом товары с 1 тегом будут друг другу релевантны (правила правильной индексации в поисковиках)
-
06|Сен|2012
18
Насколько помню у Симплы нет понятия тегов. Или Вы имеете ввиду мета-теги? Если их, то они не индексируем, т.к. идут сплошным текстом. А использовать полнотекстовый поиск крайне не рекомендую, тем более у магазина.
-
Алексей
28|Ноя|2012 19А нельзя ли еще и бренд чтоб он палил? Вы мне наводку дайте — дальше я сам) а сделаете — так и благодарность на яд скину)
-
Danila WarWolf
16|Апр|2013 20Чтобы избавиться от вываливающихся Notice убейте строчку в коде автора: $related_product_variant->price *= (100-$discount)/100;
-
Евгений
03|Сен|2013 21В версии 2.0.2 работает, но вверху сайта висят такие строки:
Warning: Attempt to assign property of non-object in V:\home\localhost\www\simpla\view\ProductView.php on line 213
Warning: Attempt to modify property of non-object in V:\home\localhost\www\simpla\view\ProductView.php on line 215
Warning: reset() expects parameter 1 to be array, null given in V:\home\localhost\www\simpla\view\ProductView.php on line 215
Warning: Cannot modify header information — headers already sent by (output started at V:\home\localhost\www\simpla\view\ProductView.php:213) in V:\home\localhost\www\simpla\view\ProductView.php on line 231
Warning: Cannot modify header information — headers already sent by (output started at V:\home\localhost\www\simpla\view\ProductView.php:213) in V:\home\localhost\www\simpla\index.php on line 31
Как можно избавиться от данной ошибки?
-
beeline
04|Сен|2013 22Спасибо за решение! Работает без проблем.
А не сложно ли Вам подсказать, как реализовать связанные товары на основании значения характеристики товара? М.б. у Вас есть готовое решение? Если нет, то за сколько Вы готовы реализовать это?
-
Тао
26|Мар|2014 23Спасибо за решение. Очень прекрасно работает.
-
Raster
16|Окт|2014 24Как сделать чтобы выводил товары из другой категории?
-
26|Мар|2015
25
В id_category указать другую категорию.
-
Андрей
06|Сен|2016 26Simpla 2.3.6 — работает, большое спасибо!
Чтобы подогнать под свой шаблон пришлось урезать вывод с 6 до 4 товаров.