Один из пользователей форума Симплы (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

Опубликовать в Яндекс
Опубликовать в Facebook
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Опубликовать в LiveJournal
Опубликовать в Google Plus
Опубликовать в Google Buzz