SMARTY замена

Статус
В этой теме нельзя размещать новые ответы.

MyCreature

Постоялец
Регистрация
5 Окт 2008
Сообщения
83
Реакции
5
Есть кусок вывода элементов массива:

Код:
{foreach from=$__products item=_product}
........................................
{/foreach}

Возможно ли изменить это на вывод случайного элемента из этого массива?
 
Если чисто средствами Smarty, то попробуй поковырять rand из {math}.
Если нужен только один элемент массива, то имхо можно генерить индекс элемента средствами php и потом передавать смарти сгенерированный индекс и по нему выводить на печать.
 
В smatry разбираюсь плохо. Почему не срабатывает:

Код:
{math equation="rand() % (maximum-1)" maximum=$__products.count assign="random_index"}

{$_product=products[$random_index]}
 
Всетаки тебе одно значение массива необходимо?
Тогда вот что говорит об этом Smarty:
{math} - это очень ресурсоёмкая функция из-за использования ею функции PHP eval(). Выполнение математических операций в PHP намного эффективнее, так что по возможности используйте PHP для математических рассчетов и присваивайте результат шаблону.

Поэтому лучше сгенерируй в скрипте индекс и передай его в шаблон.
 
Нет нужно действительно в самом шаблоне это выполнять.

Вместо вывода всего массива будет вывод нескольких значений в разных местах.
 
Есть кусок вывода элементов массива:

Код:
{foreach from=$__products item=_product}
........................................
{/foreach}

Возможно ли изменить это на вывод случайного элемента из этого массива?
Можно так:
PHP:
...
{php}
$this->_tpl_vars['_product'] = $this->_tpl_vars['__products'][rand(0, count($this->_tpl_vars['__products'])-1) ];
{/php}
{$_product}
...
 
Вообще шаблон смарти же первоначально задумывался для вывода html, а все подобное случайному выбору надо на php все-таки делать.
 
Мы сейчас обсуждаем возможность, а не идеологию кодирования.
 
Да начиная с Version 2.5.0-RC2 (March 26, 2003) они расширили модификаторы с пощью @. Так к любой переменной можно прицепить PHP функцию
PHP:
{$arr|@count}
{$str|@substr:3:2}

P.S.
Век живи, век учись.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху