avatar

Автоматически сгенерированные связанные товары

Опубликовал в блог Дополнения и модули для Simpla CMS
0
Логика заключается в том, что мы выбираем весь товары из категории (в скрипте есть ограничение в 100, если у Вас больше — увеличьте на предполагаемых длину). Скрипт выбирает связанный товар (6 штук), которые идут после данного товара. При достижении конца списка скрипт добирает нехватку из начала списка. Таким образом список связанных товар фиксированный до тех пока не внесут изменения в каталог.

Итак, открываем файл view/ProductView.php и в районе 144 строки находим код
$this->design->assign('related_products', $related_products);
}

И сразу после закрывающей скобки добавить систему генерации связанных товаров из той же категории, что и сам товар
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: генерируемые связанные товары


ДЕМО

вот скрин админки, связанных товаров нет
8 комментариев RSS
avatar
Сыпится ошибка в данной строке
$related_product_variant->price *= (100-$discount)/100;

Ошибка:
PHP Notice: Undefined variable: discount
Версия симлы 2.3.6
Подскажите как решить проблему
avatar
вот файл ProductView.php от 2.3.6 попробуй закинуть в папку view, если не поможет, будем искать решение.
avatar
Заменил файл но ошибка осталась, вот что в логах
Creating default object from empty value in /var/xxx/xx/ on line 132

Undefined variable: discount in /var/xxx/xx/ on line 163
avatar
Искал штуку месяц. огромное спасибо ))) получилось всё
avatar
Все отлично работает — Спасибо
avatar
на 2.3.6 не работает, ошибки выдает:
Warning: Creating default object from empty value in /home/сайт/сайт/view/ProductView.php on line 132

Warning: Cannot modify header information — headers already sent by (output started at /home/azdsu/teplocentr.su/view/ProductView.php:132) in /home/сайт/сайт/view/ProductView.php on line 206

Warning: Cannot modify header information — headers already sent by (output started at /home//сайт/сайт/view/ProductView.php:132) in /home/сайт/сайт/index.php on line 24
— P.s. фалы которые скидывали качал- ничего не изменилось
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.