Плагин для SMARTY

Целью данной статьи является показать, как пишутся пользовательские функции для SMARTY.

   Допустим, требуется функция, возвращающая значения из параметра в случайном порядке. Насколько я знаю, в стандартном наборе SMARTY такой нет.

   Пути к функциям SMARTY храница в свойстве plugins_dir объекта SMARTY.
Это массив, пишем так:


	...
	$smarty->plugins_dir[] = 'относительный или абсолютный путь к самописным функциям';
	...

   Рекомендую не хранить пользовательские функции в папке со стандартными. Это облегчит обновление SMARTY. Далее так:


	...
	<img class="{rand values=''left,center,right''}" src="..." alt="..." />
	...

   Собственно, {rand} — новая функция. values — её параметр.
Далее в папке, добавленой в plugins_dir, создаём файл function.rand.php. Почему "function" и "rand" — думаю, понятно.
Его содержимое:


<?php
/**
 * Smarty plugin
 * @package Smarty
 * @subpackage plugins
 */

/**
 * Smarty {rand} function plugin
 *
 * Type:     function
 * Name:     rand<br/>
 * Date:     August 30, 2008<br/>
 * Purpose:  random return given values<br/>
 * Input:
 *         - values = comma separated list of values to
 *         - delimiter = the value delimiter, default is ","
 *
 * @author Tsapenko Serghey aka Nck
 * @version  1.0
 * @param string
 * @return string
 */
function smarty_function_rand($params){
	$values = (empty($params['values'])) ? 'default' : $params['values'];
	$delimiter = (empty($params['delimiter'])) ? ',' : $params['delimiter'];

	if ($values == 'default')
		return null;
	$values = explode($delimiter, $values);
	$rand = array_rand($values);
	return $values[$rand];
}?>

   Коментарии необязательны (об этом лучше никому не говорить), но считаются хорошим тоном.
$params — массив, передаваемый SMARTY в функцию, содержащий параметры из шаблона.
Если параметр values отсутствует — не возвращаем ничего (return null).
   Далее, разбиваем $values в массив функцией explode
и возвращаем случайный элемент массива.
Вот и всё.

   Теперь более сложный вариант.
Требуется однажды сгенирировать значение, и спользовать его далее есколько раз (гипотетический пример).
В шаблоне пишем так:


	...
	{rand values="itiltleft,itiltnone,itiltright" assign="rand_value"}
	<img class="instant {rand_value}" src="..." alt="..." />
	...

   Код выглядет так:


<?php
/**
 * Smarty plugin
 ...
 * @return string
 */
function smarty_function_rand($params, &$smarty){
	$values = (empty($params['values'])) ? 'default' : $params['values'];
	$delimiter = (empty($params['delimiter'])) ? ',' : $params['delimiter'];
	$var = (empty($params['assign'])) ? 'default' : $params['assign'];

	if (($values == 'default') || ($var == 'default'))
		return null;
	$values = explode($delimiter, $values);
	$rand = array_rand($values);
// Смотреть Здесь !
	$smarty->assign($var, $values[$rand]);
	return null;
}?>

   Тоже ничего сложного. В параметрах функции добавилась ссылка на объект SMARTY.
Из массива $params получаем значетие параметра assign и стандартным способом
     $smarty->assign($var, $values[$rand]);
её назначаем. Вот собственно и всё.

Запись опубликована в рубрике PHP. Добавьте в закладки постоянную ссылку.

2 комментария: Плагин для SMARTY

  1. akm говорит:

    HI all! good job!

  2. Bruce говорит:

    Спасибо, помогло.

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

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

This blog is kept spam free by WP-SpamFree.