Недавно пришлось столкнуться с задачей в движке 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 не работает (а я не знаток этого языка программирования), поэтому пришлось написать такое большое условие.
Сам список товаров будет выглядеть так:
{if $wa->shop}
{$products = $wa->shop->productSet("bestsellers")}
{$_tmp = shuffle($products)}
{include file="list-thumbs-random.html" products=$products}
{/if}