Как реализовать рекомендованные товары

Правила раздела: faq.php?mode=okay
Модератор: Модераторы

sergresso M
Аватара
sergresso M
Возраст: 38
Репутация: 6
Сообщения: 21
Зарегистрирован: 21.01.2019
С нами: 5 лет 2 месяца

Сообщение #1 sergresso » 03.02.2019, 15:40

Как реализовать рекомендованные товары в карточке товара автоматически из этой же категории?
Чтобы допустим не выбирать вручную, а выводить все автоматом?

yodaexolon
yodaexolon
Репутация: 2
Сообщения: 14
Зарегистрирован: 12.01.2019
С нами: 5 лет 2 месяца

Сообщение #2 yodaexolon » 03.02.2019, 20:40

открываем файл view/ProductView.php и находим следующий код:

Код: Выделить всё

$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);
}


Код работает по следующему принципу: находит товар и берет 6 следующих за ним товаров из одной категории. Если достигнут конец списка, то оставшиеся товары берутся с начала списка. Обратите внимание, что в скрипте стоит ограничение на 100 товаров в одной категории - если у вас больше, увеличьте это значение. Выбирается 6 товаров - если вам нужно больше, также смените цифру на нужную.

sergresso M
Аватара
sergresso M
Возраст: 38
Репутация: 6
Сообщения: 21
Зарегистрирован: 21.01.2019
С нами: 5 лет 2 месяца

Сообщение #3 sergresso » 04.02.2019, 11:14

yodaexolon писал(а):открываем файл view/ProductView.php и находим следующий код:
Спасибо большое за помощь!

Nevermore_sial
Nevermore_sial

1I9VGZ2Tz155Z

Сообщение #4 Nevermore_sial » 19.03.2019, 15:51

yodaexolon писал(а):открываем файл view/ProductView.php и находим следующий код:

Код: Выделить всё

$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);
}


Код работает по следующему принципу: находит товар и берет 6 следующих за ним товаров из одной категории. Если достигнут конец списка, то оставшиеся товары берутся с начала списка. Обратите внимание, что в скрипте стоит ограничение на 100 товаров в одной категории - если у вас больше, увеличьте это значение. Выбирается 6 товаров - если вам нужно больше, также смените цифру на нужную.

Скажите, пжл, а можно еще доработать код и сделать так чтоб цена на пример + 2000 вверх была и - 2000 вниз была, дабы ограничить что сильно дорогие товары не подтягивались!

ShalmievCom
Аватара
ShalmievCom
Репутация: 5
Сообщения: 20
Зарегистрирован: 01.11.2019
С нами: 4 года 4 месяца
Сайт ВКонтакте

Сообщение #5 ShalmievCom » 18.01.2020, 06:53

yodaexolon писал(а):открываем файл view/ProductView.php и находим следующий код:

Код: Выделить всё

$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);
}


Код работает по следующему принципу: находит товар и берет 6 следующих за ним товаров из одной категории. Если достигнут конец списка, то оставшиеся товары берутся с начала списка. Обратите внимание, что в скрипте стоит ограничение на 100 товаров в одной категории - если у вас больше, увеличьте это значение. Выбирается 6 товаров - если вам нужно больше, также смените цифру на нужную.

Форумчане, выручайте, помогите данный код применить к версии системы 3.5.5.. =) Может кто-то на постоянной основе может и хочет в качестве подработки помогать мне с сайтами на okay? Таких сайтов у мня 5 штук и везде требуются мелкие доработки, возникающие в процессе улучшения функционала и SEO продвижения.
https://Shalmiev.Com создаю, улучшаю и продвигаю сайты


Название раздела: Вопросы по работе с OkayCMS
Правила раздела: faq.php?mode=okay

Быстрый ответ


Введите код в точности так, как вы его видите. Регистр символов не имеет значения.
Код подтверждения

   

Вернуться в «Вопросы по работе с OkayCMS»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 31 гость