Smarty конспект

Категория: / Mine блог / PHP (LAMP)
В smarty предусмотрено комментирование кода?

{* комментарий *}


Как экранировать код в котором встречаются {}

{ldelim} = {, {rdelim} = } либо
{literal}...{/literal}


Как посчитать количество элементов в массиве

{$group.items|@count}


Как создать внутреннюю переменную smarty

{assign var=tmp_var value="string value"}


Значение переменной по-умолчанию

{$my_var|default:"Default value"}


Как сделать чтобы смарти вычислил значение переменной при присвоении

{include file="`$evaluable_variable`/shell_header.inc"}
{include file="$cpp/shell_header.inc"}
 
{include file="$template/index.tpl"}
так не сработает - {include file="$prefixindex.tpl"}
{$include file=$prefix|concat:"index.tpl"}


Полезные строковые модификаторы

{$cart_content[index].cost|replace:'&':'&'}
{$mystring|substr:5:10}
{$mystring|substr:5}


Экранирование

{$articleTitle|escape}
{$articleTitle|escape:'html'}    {* экранирует  & " ' < > *}
{$articleTitle|escape:'htmlall'} {* экранирует ВСЕ HTML-сущности *}
{$articleTitle|escape:'url'}
{$articleTitle|escape:'quotes'}


Текущая дата

{$smarty.now|date_format:"%d.%m.%Y %H:%M"}


Как организовать цикл for

for($i=1;$i<10;$i++)
 
{section name=foo loop=9}
    {$smarty.section.foo.iteration}
{/section}


Как в цикле foreach определить первый и последний элемент

{foreach name=foo from=$array}
{if $smarty.foreach.foo.first} этот первый {/if}
 
{$smarty.foreach.foo|@debug_print_var}
 
{if $smarty.foreach.foo.last}  этот последний {/if}
{/foreach}


Использование условий if

{if isset($name) && NOT empty($name)}
...
{elseif $name == $foo}
...
{/if}
 
{if is_array($foo) && count($foo) > 0)
    {* do a foreach loop *}
{/if}


Передача параметров вызываемому шаблону

{include file='navigator.tpl' params=$params}
В шаблоне navigator.tpl будет доступна переменная $params с переданным значением.


Использование захватов (capture)

{capture name=capMe}
<span>I am html</span>
{/capture}
 
{if $some_expression_is_true}<div>{$smarty.capture.capMe}</div>{else}<p>{$smarty.capture.capMe}</p>{/if}


Смарти умеет вычислять!

{math equation="(( x + y ) / z )" x=2 y=10 z=2}
{math equation="x + y" x=4.4444 y=5.0000 format="%.2f"}
{math equation="height * width / division"
      height=$row_height
      width=$row_width
      division=$div}


Обратите внимание, результат можно отформатировать с помощью printf-like шаблонов.

Также для форматирования в smarty есть отдельный модификатор

{$number|string_format:"%.2f"}
{$number|string_format:"%d"}


Вообще с помощью math можно юзать основные нативные вычисляющие функции php.

 
+, -, /, *, abs, ceil, cos, exp, floor, log, log10, max, min, pi, pow, rand, round, sin, sqrt, srans и tan
 


Случайное число (random)

 
{math equation='rand(10,100)'}
 


Дополнительные вспомогательные операции

%   mod   $a mod $b   modulus   %
is [not] div by       $a is not div by 4  divisible by  $a % $b == 0
is [not] even       $a is not even  [not] an even number (unary)  $a % 2 == 0
is [not] even by      $a is not even by $b  grouping level [not] even   ($a / $b) % 2 == 0
is [not] odd      $a is not odd   [not] an odd number (unary)   $a % 2 != 0
is [not] odd by       $a is not odd by $b   [not] an odd grouping   ($a / $b) % 2 != 0
 
#модуль, определение четности, нечетности, кратности


Переменные смарти

{$smarty.server.SERVER_NAME}
{$smarty.template} текущий шаблон
{$smarty.server.SCRIPT_NAME} путь до скрипта (относительно server_root)
{$smarty.get.page} - REQUEST_URI


То есть из smarty мы можем обратиться к массиву $_SERVER и $_GET.
Например, определим, находимся ли мы сейчас на главной странице

{if $smarty.server.REQUEST_URI == "/"}кажется это главная{/if}


Отладка в smarty

Значение переменной
{$foo|@debug_print_var}


Консоль отладки, показывает все переданные данные скриптом в smarty
{debug}


Объекты (классы) в smarty

 
// создаем объект класса MyObject
class MyObject {
    function dummy($params, &$smarty) {
        return 'method!';
    }
}
$myobj = new MyObject;
 
// регистрируем объект по ссылке
$smarty->register_object('foobar',$myobj);
// ограничиваем доступ к методам
$smarty->register_object('foobar',$myobj,array('meth1','meth2','prop1'));
// или так, если без ограничений
$smarty->register_object('foobar',$myobj,null,false);
// Используем by_ref для объектов
$smarty->assign_by_ref('myobj', $myobj);
$smarty->display('index.tpl');
?>
 


 
{* доступ к методу, передача параметра *}
{foobar->meth1 p1='foo' p2=$bar}
 
{* можем поймать вывод метода *}
{foobar->meth1 p1='foo' p2=$bar assign='output'}
Метод вернул {$output}
 
{* доступ к объекту, назначенному через assign *}
{$myobj->meth1('foo',$bar)}
 



Полный мануал по смарти -
http://www.smarty.net/manual/ru/

@author: surg30n
@date: Вторник, 14 Апрель 2009


Комментарии : 7


7] Гость - 15:39, 21 Декабрь, 2011
Для того чтобы назначить переменной вывод команд include, math и других,
достаточно указать в параметрах

assign="var"
6] Гость - 11:59, 23 Июнь, 2011
помогите как в smarty можно завтрашнюю дату сделать?
5] Гость - 13:41, 05 Май, 2011
блин, ошибся в слове "ошибка" ^^
4] Гость - 13:40, 05 Май, 2011
Спасибо.
P/S У Вас оибка: Надоело разбирать числа на картинке? [b]Зарегистрируся[/b], докажи что ты не робот!
3] Гость - 13:46, 24 Сентябрь, 2010
в точку! спасибо за конспект . добавил в избранное. ты хоть рекламку повесь:) покликаем:)
2] Гость - 18:34, 28 Август, 2010
Благодарю! помог с первым и последним элементами в foreach
1] Гость - 14:58, 23 Апрель, 2010
спасибо, помог с "Как организовать цикл for"!

Такое простое вроде бы, а сразу не поймешь как сделать по документации.
Комментировать:




Код подтверждения: *
Введите подтверждающий код, так же как он отображен на картинке.
Надоело разбирать числа на картинке? Зарегистрируся, докажи что ты не робот!

загрузка...

Приколы тосты на свадьбу. Самый лучший тост на свадьбу. Тосты на свадьбу. . Фирма Александрия торгует поликарбонат, лучшие цены. . огнетушители . Спортивные магазины Москвы - магазин спортивного питания.