Доработки магазина Simpla: случайные связанные товары
Дата: 11 Фев ' 11 Автор: mart Рубрики: Программирование
Один из пользователей форума Симплы (http://forum.simplacms.ru) высказал идею случайным образом формировать списки связанных товаров, дабы была перелинковка. В данной примере описано как доработать интернет-магазин, чтобы связанные товары автоматически формировались по товарам из категории самого продукта.
Открываем файл Storefront.class.php в корне Вашего сайта. Находим комментарий «связанные товары» (примерно 599) строка в базовом классе и заменяем весь кусок кода до комментария «параметры товара». Я сделал блок дополнения массива индексов связанных товаров $ids, но для удобства восприятия привел код замены всего блока формирования связанных позиций.
599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 | // связанные товары $products = array(); $query = sql_placeholder('SELECT products_variants.product_id FROM products_variants, related_products WHERE products_variants.sku=related_products.related_sku AND related_products.product_id = ?', $product->product_id); $this->db->query($query); $related = $this->db->results(); $ids = array(); foreach($related as $r) $ids[] = $r->product_id; if(count($ids) < 8) { //исключаем выбранные ИД foreach($ids as $k=>$id) $filters[] = "products.product_id <> ".$id; //исключаем сам товар $filters[] = "products.product_id <> ".$product->product_id; $id_filter = count($ids) ? is_null($ids)?"":" AND (".implode(" OR ",$filters).") " : ""; //ищем в текущей категории $category_filter = is_null($product->category_id)?"":"AND ( categories.category_id = $product->category_id OR products_categories.category_id = $product->category_id )"; //остаток для добора $limit = 8 - count($ids); $query = "SELECT products.product_id FROM products LEFT JOIN categories ON categories.category_id = products.category_id LEFT JOIN products_categories ON products_categories.category_id = products.category_id WHERE products.enabled=1 $id_filter $category_filter GROUP BY products.product_id ORDER BY RAND() LIMIT $limit"; $this->db->query($query); $related = $this->db->results(); foreach($related as $r) $ids[] = $r->product_id; } if(count($ids)) $product->related_products = Storefront::get_products($ids); |
Вот и вся «магия». И как обычно буду благодарен тем, кто поддержит трудовые изыскания материально — данных справа…
Всем удачи!
P.S. Исправлена ситуация, если нету вообще связанных. Исправлено подключение связанных таблиц INNER -> LEFT.
P.P.S. Исправлено по замечанию Коса — добавлено исключение самого товара — строка 613 <> $product->product_id
19 комментариев
-
Sj
11|Фев|2011 1Вроде сдала так же, не работает!
>>Исправил скрипты — должно заработать -
12|Фев|2011
2
Напишите в асю или оставьте почту в форме контактов — решим. У 3 человек отработало. 🙂
-
Sj
15|Фев|2011 3Спасибо! Теперь заработало!
-
кос
15|Мар|2011 4в общем все пашет, только один баг, выбранный товар тоже там присутствует странным образом)
-
21|Мар|2011
5
Спасибо за замечание — исправлено.
-
кос
21|Мар|2011 6Отблагодарил с помощью WMR)
-
кос
25|Мар|2011 7не полностью работает, при первом переходе на товар, он все таки по прежнему отображается в «Также советуем посмотреть», если обновить страницу сразу исчезает.
-
кос
25|Мар|2011 8в общем не так… 🙂
если прописывать в товаре совместимость с другими в ручную, тогда он дублируется
-
imd
11|Янв|2012 9Работает, но как сделать, чтоб при обновлении страницы, товары не менялись..? это вредно для продвижения
-
29|Янв|2012
10
Уберите ORDER BY RAND() — тогда не будет случайной выборка.
-
Алексей
15|Янв|2012 11а как убрать из этой выборки товары, которые отображаются, но их нет в наличии?
-
29|Янв|2012
12
В этом коде не планировался такой функционал, а добавление таблицы вариантов в выборку увеличит нагрузку, что не желательно.
-
Игорь
16|Янв|2012 13а если в корне нет Storefront.class.php? как быть? версия Simpla CMS 2.0.2
-
29|Янв|2012
14
Код был сделан под версию 1.4.3.
Под вторую ветку в ближайшие неделю-полторы напишу аналогичный функционал.
Дело в том, что статьи выкладываются из рабочих моментов, которые заказывают по Симпле. Пока под вторую этого функционала никто не заказывал. Так что при наличии свободного времени — выложу. -
nigga
05|Фев|2012 15mart
сейчас скрипт он рандомно выбирает товары из основной категории товара, при обновлении они тоже обновляются, если убрать рандомное обновление стерев ORDER BY RAND(), тогда для всех товаров получается один и тот же набор товаров.
нужно:
чтобы для каждого товара формировался свой собственный рандомный список товаров, и при обновлении страницы не менялся.
как такое реализовать? - 06|Фев|2012 16
-
nigga
13|Фев|2012 17«если прописывать в товаре совместимость с другими в ручную, тогда он дублируется»
1. как же всё-таки сделать чтобы товар не дублировался?
2. как сделать чтобы товары брались не только из категории товара, а вообще из всех товаров? -
Павел
16|Авг|2012 18Странно а такого файла у меня нет
-
17|Авг|2012
19
Какого именно?