Rand() php случайно число из предложенных для ModX

181
25 января 2018, 20:07

Добрый день. Имеется 3 числа, например (20, 125, 25) Нужно запустить рандом, чтобы выпадало одно из этих чисел

У меня есть вызов getResources

[[!getResources? 
            &showHidden=`1` 
            &sortbyTV=`price`
            &sortdirTV=`ASC`
            &sortbyTVType=`integer`
            &tpl=`items` 
            &limit=`4` 
            &includeContent=`1` 
            &processTVs=`1` 
            &includeTVs=`image,tags,price` 
            &parents=`20,125,25`
        ]]

Необходимо вместо &parents выводить рандомно один из ресурсов

Answer 1
$arrNumb = array(20,125,25);
$randNumb = $arrNumb[rand(0,2)];
Answer 2

В общем 2 варианта: простой, простой(но сложнее) -

простой: Создаем сниппет randomItems:

$items = array(20,132,21,125,22,23,117,25,142,24);
return $items[rand(0,9)];

Недостатки:Клиенту (менеджеру) придется заходить в сниппет дабы изменить вызываемые ресурсы (коллекции, элементы которых отображаются на странице)

Вызов сниппета:

[[!getResources? 
            &showHidden=`1` 
            &sortbyTV=`price`
            &sortdirTV=`ASC`
            &sortbyTVType=`integer`
            &tpl=`items` 
            &limit=`4` 
            &includeContent=`1` 
            &processTVs=`1` 
            &includeTVs=`image,tags,price` 
            &parents=`[[randomItems]]`
]]

сложнее

$items = explode(",",$items);
for ($i=0; $i <count($items) ; $i++)
{
    $items[i] *= 1;
}
return $items[rand(0,count($items) - 1)];

Здесь мы принимаем массив из строк из чанка (или шаблона или еще чего). Эксплодом делим на массив строк с разделителем ",". Таким циклом преобразуем строки в числа и ретёрним рандомом.

Вызов сниппета:

[[!getResources? 
            &showHidden=`1` 
            &sortbyTV=`price`
            &sortdirTV=`ASC`
            &sortbyTVType=`integer`
            &tpl=`items` 
            &limit=`4` 
            &includeContent=`1` 
            &processTVs=`1` 
            &includeTVs=`image,tags,price` 
            &parents=`[[!randomItems? &items=`20,132,21,125,22,23,117,25,142,24`]]`
        ]]

Не забываем восклицательный знак (!), чтобы элементы не кэшировались и отображались всегда разные элементы

READ ALSO
PHP: поиск в массиве объектов

PHP: поиск в массиве объектов

Добрый деньПолучаю историю транзакций QIWI-кошелька по API

147
Оставить только буквы и цифры в поисковом запросе сайта!

Оставить только буквы и цифры в поисковом запросе сайта!

Суть вопрос в следующем: Пользователь вводит в поисковую строку номер 136АВ54:00%21 и жмет поиск!

139
Отправка почтовых писем через smtp Яндекса

Отправка почтовых писем через smtp Яндекса

Доброго времени суток, давно ищу простой и понятный код для отправки писем через smtpВезде где не искал, предлагают или огромную библиотеку...

146
PHP скрипт завершается без причины

PHP скрипт завершается без причины

Имеется PHP cronjob скрипт, который импортирует данные в БД WordPressДанных много, ориентировочное время выполнения должно быть 1

150