Товары на главной в случайном порядке

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

makki M
makki M
Репутация: 199
Сообщения: 697
Зарегистрирован: 12.08.2016
С нами: 7 лет 7 месяцев
Откуда: Киев
Сайт

Сообщение #1 makki » 01.12.2017, 22:50

Простое но полезное решение, которое придаст динамичности вашему магазину.
По умолчанию Хиты продаж, Новинки и Акционные товары на главной странице отображаются в порядке соответствующему дате добавления товара. Т.е. покупатель всегда видит те же товары. Для того, чтобы при каждой перезагрузке страницы, отображать товары в случайном порядке из списка соответствующих товаров, нужно сделать такие нехитрые действия в файле view/View.php

Хиты продаж
После строки

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

public function get_featured_products_plugin($params, &$smarty) {

добавьте

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

        if(!isset($params['sort'])) {
            $params['sort'] = 'rand';
        }


Новинки

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

public function get_new_products_plugin($params, &$smarty) {

Тут логичнее, если товары действительно отображаются в порядке добавления в магазин. Ничего не меняем.

Акционные товары
После строки

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

public function get_discounted_products_plugin($params, &$smarty) {

добавьте такой же код

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

        if(!isset($params['sort'])) {
            $params['sort'] = 'rand';
        }
Cоздание и расширение функционала интернет-магазина на платформе OkayCMS 2 (с 3-й и 4-й версией не работаю)

Vadik
Vadik
Репутация: 1
Сообщения: 42
Зарегистрирован: 15.12.2016
С нами: 7 лет 3 месяца

Сообщение #2 Vadik » 02.12.2017, 01:38

Здравствуйте. А можно как-то сделать, чтобы при первом заходе отображался мною выбранный товар (у меня в магазине отображаются только хиты продаж, которые собственно сам и выбирал), а уже в дальнейшем, после обновления, чтобы отображался случайным образом товар?

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #3 korshunov » 02.12.2017, 08:49

Несколько заумный способ.

Проще всего лишь в шаблоне main.tpl поменять
{get_discounted_products var=discounted_products limit=4}
на
{get_discounted_products var=discounted_products limit=4 sort=rand}

Параметры в функции для того и придуманы, чтоб их простой пользователь задавал легко и просто, не влезая в программный код...

Добавлено спустя 5 минут:
Vadik писал(а):Здравствуйте. А можно как-то сделать, чтобы при первом заходе отображался мною выбранный товар (у меня в магазине отображаются только хиты продаж, которые собственно сам и выбирал), а уже в дальнейшем, после обновления, чтобы отображался случайным образом товар?

Можно, но несколько хлопотно. И надо задачу ставить, потому как реализовывать можно по разному. А если через неделю найдет еще, это как считать - "первый заход" или уже не первый? И как считать заходы - то ли только по главной странице, то ли по всем страницам сайта?

makki M
makki M
Репутация: 199
Сообщения: 697
Зарегистрирован: 12.08.2016
С нами: 7 лет 7 месяцев
Откуда: Киев
Сайт

Сообщение #4 makki » 02.12.2017, 18:40

korshunov писал(а):Проще всего лишь в шаблоне main.tpl поменять
{get_discounted_products var=discounted_products limit=4}
на
{get_discounted_products var=discounted_products limit=4 sort=rand}

Параметры в функции для того и придуманы, чтоб их простой пользователь задавал легко и просто, не влезая в программный код...
Спасибо!
Cоздание и расширение функционала интернет-магазина на платформе OkayCMS 2 (с 3-й и 4-й версией не работаю)

Vadik
Vadik
Репутация: 1
Сообщения: 42
Зарегистрирован: 15.12.2016
С нами: 7 лет 3 месяца

Сообщение #5 Vadik » 03.12.2017, 07:28

Понятно. Спасибо

pizhama
pizhama
Репутация: 0
Сообщения: 18
Зарегистрирован: 15.12.2018
С нами: 5 лет 3 месяца

Сообщение #6 pizhama » 09.01.2019, 14:13

А как можно сделать вывод случайного товара на главной?

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #7 korshunov » 09.01.2019, 14:46

По аналогии, скажем, с выводом рекомендованных на главной. Изменять в двух местах - в шаблоне main.tpl и написать свою функцию в view/View.php.

Andrijk
Andrijk
Репутация: 1
Сообщения: 44
Зарегистрирован: 12.02.2019
С нами: 5 лет 1 месяц

як реалізувати такий вивід товарів в v.3.5.2

Сообщение #8 Andrijk » 14.05.2020, 07:29

Добрий день підкажіть як можна зробити такий вивід товарів в версії v.3.5.2

zyxer M
zyxer M
Возраст: 32
Репутация: 77
Сообщения: 419
Зарегистрирован: 03.02.2016
С нами: 8 лет 1 месяц
Откуда: Днепр

Сообщение #9 zyxer » 14.05.2020, 12:35

В принципе как и в двойке, вот уже ответили

korshunov писал(а):Проще всего лишь в шаблоне main.tpl поменять
{get_discounted_products var=discounted_products limit=4}
на
{get_discounted_products var=discounted_products limit=4 sort=rand}
Всё сказанное мной, является лично моим мнением, и не является официальной позицией OkayCMS

muno
muno
Репутация: 1
Сообщения: 18
Зарегистрирован: 20.08.2020
С нами: 3 года 6 месяцев

Сообщение #10 muno » 19.09.2020, 13:56

За подсказку /sort=rand/ спасибо! Уже работает)

А теперь, внимание, вопрос!

Заголовок темы звучит так: "Товары на главной в случайном порядке".

Вот именно это я и хотел бы реализовать.

Не feautured_products
Не discounted_products
Не new_products
Не browsed_products

А именно all_products, если можно так выразиться.
Подозреваю, что main.tpl и view.php потребуют глубокой модернизации.

Помогите, пожалуйста!
Спасибо!

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #11 korshunov » 19.09.2020, 16:13

muno писал(а):Заголовок темы звучит так: "Товары на главной в случайном порядке".
Вот именно это я и хотел бы реализовать.

По аналогии, например, с new_products...

muno
muno
Репутация: 1
Сообщения: 18
Зарегистрирован: 20.08.2020
С нами: 3 года 6 месяцев

Сообщение #12 muno » 19.09.2020, 20:48

Ну, если с main.tpl более-менее понятно...

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

    {* All products *}
    {get_all_products var=all_products limit=4 sort=rand}
    {if $all_products}
        <div class="h2">
            <span data-language="main_all_products">{$lang->main_all_products}</span>
            // * Добавить слово "Товары" в Переводы * //
        </div>

        <div class="all_products clearfix">
            // * Добавить раздел "all_products" в css, скопировав и переименовав "new_products" * //       
            {foreach $all_products as $product}
                <div class="products_item no_padding col-sm-6 col-xl-3">
                    {include "product_list.tpl"}
                </div>
            {/foreach}
        </div>
    {/if}


то view.php для меня потёмки. Как изменить функцию, чтобы она не сортировала товары по времени создания?

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

    public function get_all_products_plugin($params, &$smarty) {
        if(!isset($params['visible'])) {
            $params['visible'] = 1;
        }
        if(!isset($params['sort'])) {
            $params['sort'] = 'created';
        }
        $params['in_stock'] = 1;
        if(!empty($params['var'])) {
            $images_ids = array();
            foreach($this->products->get_products($params) as $p) {
                $products[$p->id] = $p;
                $images_ids[] = $p->main_image_id;
            }
           
            if(!empty($products)) {
                // id выбраных товаров
                $products_ids = array_keys($products);
               
                // Выбираем варианты товаров
                $variants = $this->variants->get_variants(array('product_id'=>$products_ids));
               
                // Для каждого варианта
                foreach($variants as $variant) {
                    // добавляем вариант в соответствующий товар
                    $products[$variant->product_id]->variants[] = $variant;
                }
               
                // Выбираем изображения товаров
                if (!empty($images_ids)) {
                    $images = $this->products->get_images(array('id'=>$images_ids));
                    foreach ($images as $image) {
                        if (isset($products[$image->product_id])) {
                            $products[$image->product_id]->image = $image;
                        }
                    }
                }
               
                foreach($products as $product) {
                    if(isset($product->variants[0])) {
                        $product->variant = $product->variants[0];
                    }
                }
            }
            $smarty->assign($params['var'], $products);
        }
    }


Возможно где-то ещё надо внести правки?

Спасибо за подсказку.

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #13 korshunov » 20.09.2020, 08:43

Видимо, тут:
$params['sort'] = 'created';

muno
muno
Репутация: 1
Сообщения: 18
Зарегистрирован: 20.08.2020
С нами: 3 года 6 месяцев

Сообщение #14 muno » 20.09.2020, 14:49

Вот, кстати, не первый раз проделываю подобное - очередная попытка добавить новую функцию. Итог: This page isn’t working. Вебсайт не открывается. Причём, причина в обоих файлах. Если один из них оригинальный, а другой - нет, всё равно не открывается. Подозреваю, что где-то ещё есть закладка, и просто так функцию не добавить.

В итоге просто в функции new_products в файле view.php удалил сортировку. Теперь все товары всегда будут новыми)


Название раздела: Полезные решения для OkayCMS
Правила раздела: faq.php?mode=okay

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


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

   

Вернуться в «Полезные решения для OkayCMS»

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

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