О сайте

Cоздан с помощью программы "cms Pontina".pontina.ru

Smarty - технология сайтостроения.

Условия в смарти

Смарти, являясь надстройкой над PHP, обладает своим синтаксисом. Теги условий выглядят следующим образом:

{if $a > $b}
B is less than A
{/if}

Это простое условие. Теперь простое ветвление:

{if $a > $b}
B is less than A
{else}
A is less than or equal to B
{/if}

В Smarty также есть конструкция elseif:

{if $a > $b}
B is less than A
{elseif $a < $b}
A is less than B
{else}
A is equal to B
{/if}

Знаки <,>,==, !=, <=, >=, !, % можно записать соответственно как

lt, gt, eq, ne, lte (le), gte (ge), not, mod:

{if $a gt $b}
B is less than A
{elseif $a lt $b}
A is less than B
{else}
A is equal to B
{/if}

Можно использовать логические выражения: or (||), and (&&) и т.д.:

{if $a &gt; $b or $a &lt; $b}
A is not equal to B
{/if}

Для повышения приоритета можно использовать скобки: {if ($a > $b or $a < $b) and $a < $c && $a < $d}{/if}

Есть возможность проверять числа на делимость:

{if $num is even}{$num} – четное число{else}{$num} – нечетное число{/if}
{if $num is not even}{$num} – нечетное число{else}{$num} – четное число{/if}
{if $num is odd}{$num} – нечетное число{else}{$num} – четное число{/if}
{if $num is div by 5}{$num} делится на 5 без остатка{/if}
{if $num is not div by 5}{$num} не делится на 5 без остатка{/if}

Работа с переменными в шаблоне

Здесь часто используется директива "assign" для присвоения переменной значения в шаблоне:

{assign var=num value=101}
{assign var=num value=$num+1}
{if $num mod 2 eq 0}{$num} - четное число {/if}

Теперь со строчными переменными.

В smarty есть полный аналог php-функции sprintf для форматирования строк:

{assign var='world' value='world'}
{assign var='str' value=$world|string_format:'hello, %s'}
{$str}

Приеденный пример выводит знакомую фразу "Hello World". Его можно сделать еще короче:

{assign var='world' value='world'}
{$world|string_format:'hello, %s'}

Работа со строками

Со строками можно сделать все, что можно сделать в php. Вот некоторые примеры:

  • Сделать первую букву заглавной: {$str|capitalize}
  • Присоединить одну строку к другой: {$str|cat: $str2} – кстати, замена рассмотренному выше с string_format варианту
  • Подсчитать количество символов: {$str|count_characters:true}
  • Подсчитать количество абзацев: {$str|count_paragraphs}
  • Подсчитать количество предложений: {$str|count_sentences}
  • Подсчитать количество слов: {$str|count_words}
  • Поставить отступ перед строкой: {$str|indent}
  • Сделать все буквы в строке строчными: {$str|lower}
  • Сделать все буквы в строке прописными: {$str|upper}
  • Аналог php-функции wordwrap для разбиения длинных предложений: {$str|wordwrap}
  • и т.д.

Вот например интересная возможность есть. Допустим у нас есть очень длинная строка, которая не помещается в ограниченную ячейку таблицы. Что мы можем сделать в этом случае? Мы можем обрезать эту строку, да так, чтобы в конце стояло, например, многоточие:

{assign var='str' value='Оооочень длинная строка. Ну просто ооооооооооооооочччччееень длииииииинная'}
{$str|truncate:30}

Выведет:
Оооочень длинная строка. Ну…

Этим мы сказали смарти, чтобы он обрезал строку, оставив в ней 27 символов и многоточие в конце (27+3=30). Если мы хотим вместо трех точек поставить что-нибудь свое или вообще ничего не ставить:

{$str|truncate:30:"==="}
{$str|truncate:30:""}

Выведет:
Оооочень длинная строка. Ну===
Оооочень длинная строка. Ну пр

Эти три точки можно поставить и в середине строки:

{$str|truncate:30:'…':true:true}

Выведет:
Оооочень длинн… длииииииинная

Или вот еще очень полезная вещь. Допустим у нас есть какая-то переменная, которая может быть инициализирована в php-скрипте с помощью $smarty->assign. Но она же может быть и неинициализирована (пустая). Тогда в шаблоне выводить будет нечего. Но вместо пустоты иногда требуется все-таки вывести какую-то строку. Можно было бы конечно написать, например, так:

{if $str}
{$str}
{else}
No information
{/if}

Но гораздо компактнее вот так: {$str|default:’No information’}. Вместо строки с кавычками может быть переменная: {$str|default:$noinfo}.

Маскировка e-mail.

Допустим, нам нужно вывести email, но чтобы пользователь видел его, а спаммерский скрипт, который ищет email-адреса на странице, не смог его определить (или затруднить ему определение). Рассмотрим несколько примеров:

{mailto address=”name@mail.ru”}
<a href=”mailto:name@mail.ru”>name@mail.ru</a>

{mailto address=”name@mail.ru” text=”мой ящик”}
<a href=”mailto:name@mail.ru”>мой ящик</a>

{mailto address=”name@mail.ru” text=”мой ящик” encode=”javascript”}
<script type=”text/javascript”>eval(unescape(’%64%6f%63%75%6d%65%6e%74%2e%77%72%69%74%65%28%27%3c%61%20%68%72%65%66%3d%22%6d%61%69%6c%74%6f%3a%73%6f%6d%65%40%6d%61%69%6c%2e%72%75%22%20%3e%ec%ee%e9%20%ff%f9%e8%ea%3c%2f%61%3e%27%29%3b’))</script>

Тут уже сложнее понять, что за адрес скрывается в этой куче шестнадцатеричных чисел

На самом деле все рассмотренные (и еще много нерассмотренных) функции – не что иное, как плагины, которые расширяют функциональность smarty. Мы с вами тоже научимся их писать, только не в этой статье, а чуть позже.

Комментарии

 

{* Это однострочный комментарий *}

{* Это
многострочный
комментарий *}

Глобальная переменная $smarty

Во всех шаблонах можно использовать переменную $smarty. Она дает доступ к следующим глобальным массивам вызвавшего шаблон скрипта:

  • $_GET, $_POST, $_REQUEST ($smarty.get, $smarty.post, $smarty.request)
  • $_COOKIE ($smarty.cookie)
  • $_SERVER ($smarty.server)
  • $_ENV ($smarty.env)
  • $_SESSION ($smarty.session)

Например, получим содержимое переменной $_REQUEST['id']: {$smarty.request.id}

Или определим имя скрипта: {$smarty.server.SCRIPT_NAME}

Кроме этого можно узнать текущее время: {$smarty.now} – возвращает количество секунд, прошедших с 1 января 1970 года. Вывести текущее время можно с помощью модификатора date_format (эквивалент одноименной php-функции):

{$smarty.now|date_format:’%Y-%m-%d %H:%M:%S’}

С помощью $smarty.const можно получить доступ к любой константе вызвавшего скрипта, которая была объявлена с помощью define:

{$smarty.const.MY_CONST}

Текущая версия Smarty: {$smarty.version}.

Предвижу ваши вопросы о том, что же дает эта технология. Данная статья не дает ответа на этот вопрос и не было такой цели при написании данной статьи. Здесь другая цель - помочь тем, кто уже поставлен перед фактом.

Используются технологии uCoz