Случайный товар в Shop Script 5-7

Недавно пришлось столкнуться с задачей в движке Shop Script 6 при выводе товаров из списка. Необходимо было создать возможность вывода товаров случайным образом из списка товаров.

Готового плагина, даже платного на время написания публикации так и не нашел, поэтому пришлось все придумывать самостоятельно.

Есть два решения.

Первое заключается в том, что мы создаем динамический список товаров через Магазин - Товары (и внизу слева списки). Выбираем тип динамический, количество, например 10, сортировку любую. После этого мы получим код для вставки на сайт.

Вставляем его в шаблон и немного изменяем:

{if $wa->shop}
{$products = $wa->shop->productSet("bestsellers")}
{$_tmp = shuffle($products)}
{include file="list-thumbs.html" products=$products}
{/if}

Заметьте, здесь появилось строчка {$_tmp = shuffle($products)}, за счет которой товары при каждом обновлении страницы перемешиваются. Чем не рэндом?

Но здесь есть две проблемы. Первая, - а что если нам нужно вывести всего 2 товара в рэндоме, тогда в динамическом списке количество нужно будет ставить 2 и рэндом будет идти не из всего магазина, а из этого списка, т.е. двух товаров. Практически его не будет существовать. Чтобы решить эту проблему, усовершенствуем пример.

Способ 2. Лучше

Сделайте все тоже самое, как в первом способе, только в динамическом списке поставьте количество, например, 50. Т.е. из 50 товаров у нас будет делаться рэндом.

Создайте новый list-thumbs. Можете просто продублировать ваш текущий list-thumbs от Shop Script 6, который используется по умолчанию и переименовать его в list-thumbs-random.html. Откройте его и в цикле вывода товаров добавьте следующие строки:

{$pfrt = 0}
{foreach $products as $p}
{if $pfrt == 0 || $pfrt == 1}

здесь код товара, у каждого он свой

{/if}
{$pfrt = $pfrt+1}
{/foreach}

В цикл добавляем условие, чтобы выводились только два первых рэндомных товара из 50, остальные проигнорирует. Чтобы количество рэндомных товаров было больше, например, 4, то измените условие: {if $pfrt == 0 || $pfrt == 1 || $pfrt == 2 || $pfrt == 3}.

Логично бы поставить {if $pfrt <=3}, но так в smarty не работает (а я не знаток этого языка программирования), поэтому пришлось написать такое большое условие.

123312321

Сам список товаров будет выглядеть так:

{if $wa->shop}
{$products = $wa->shop->productSet("bestsellers")}
{$_tmp = shuffle($products)}
{include file="list-thumbs-random.html" products=$products}
{/if}

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


Введите капчу: