Оглавление

32.3. Модификаторы переменных

Внутри шаблона после названия переменной через символ "|" можно указать один или несколько модификаторов. Эти модификаторы позволяют изменить данные перед их вставкой в шаблон. Например, с помощью модификаторов upper и lower можно изменить регистр символов. В Smarty доступны следующие модификаторы переменных:
□ upper заменяет все символы строки соответствующими прописными буквами:

$smarty->assign('str', 'строка в нижнем регистре');
...
{$str|upper} {* Выведет: СТРОКА В НИЖНЕМ РЕГИСТРЕ *}

□ lower заменяет все символы строки соответствующими строчными буквами:

$smarty->assign('str', 'СТРОКА В ВЕРХНЕМ РЕГИСТРЕ');
...
{$str|lower} {* Выведет: строка в верхнем регистре *}

□ capitalize делает первые символы всех слов прописными:

$smarty->assign('str', 'строка в нижнем регистре');
...
{$str|capitalize} {* Выведет: Строка В Нижнем Регистре *}

□ cat добавляет указанный фрагмент в конец строки:

$smarty->assign('str', 'строка');
...
{$str|cat:" добавленный фрагмент"}
{* Выведет: строка добавленный фрагмент *}

count_characters возвращает количество символов в строке. Если в качестве значения указать true, то при подсчете будут учитываться пробелы:

$smarty->assign('str', 'строка с пробелами');
...
{$str|count_characters} {* Выведет: 16 *}
{$str|count_characters:true} {* Выведет: 18 *}

□ count_paragraphs возвращает количество не пустых строк:

$smarty->assign('str', "строка1\nстрока2\n\nстрока3");
...
{$str|count_paragraphs} {* Выведет: 3 *}

□ count_sentences возвращает количество предложений в строке:

$smarty->assign('str', "Это предложение 1. Предложение 2.");
...
{$str|count_sentences} {* Выведет: 2 *}

□ count_words возвращает количество слов в строке:

$smarty->assign('str', 'строка с пробелами');
...
{$str|count_words} {* Выведет: 3 *}

□ date_format форматирует дату согласно указанному шаблону. В строке формата можно указать специальные символы, которые применяются в функции strftime (). Пример:

setlocale(LC_ALL, "ru_RU.CP1251", "Russian_Russia.1251");
$smarty->assign('d', time());
...
{$d|date_format} {* Выведет: ноя 17, 2009 *}
{$d|date_format:"%d.%m.%Y"} {* Выведет: 17.11.2009 *}
{$smarty.now|date_format:"%d.%m.%Y"} {* Выведет: 17.11.2009 *}

□ default позволяет указать значение по умолчанию, если переменная не определена или пустая:

$smarty->assign('var1', '');
$smarty->assign('var2', '5');
...
{$var1|default:"Значение по умолчанию"}
{* Выведет: Значение по умолчанию *}
{$var2|default:"Значение по умолчанию"} {* Выведет: 5 *}

□ escape кодирует или экранирует спецсимволы в строке. В первом параметре могут быть указаны следующие значения: "html", "htmlall", "url", "urlpathinfo", "quotes", "hex", "hexentity",  "javascript", "mail".. Во втором параметре задается кодировка. Пример:

$smarty->assign('str', 'абв"<>\'?');
...
{$str|escape:"html"} {* Выведет: абв&quot;&lt;&gt;&#039;? *}
{$str|escape:"htmlall":"cp1251"}
{* Выведет: &#1072;&#1073;&#1074;&quot;&lt;&gt;&#039;? *}
{$str|escape:"url"} {* Выведет: %E0%E1%E2%22%3C%3E%27%3F *}
{$str|escape:"hex"} {* Выведет: %e0%e1%e2%22%3c%3e%27%3f *}
{$str|escape:"javascript"} {* Выведет: абв"<>\'? *}

□ indent создает отступы в начале каждой строки. В первом параметре можно указать количество повторений, а во втором — символы, которые будут повторяться. По умолчанию пробел повторяется четыре раза.

Пример:

$smarty->assign('str', "Строка 1\nСтрока 2");
...
{$str|indent}
{* Выведет: 
    Строка 1
    Строка 2
*}
{$str|indent:3:"&nbsp;"}
{* Выведет: 
&nbsp;&nbsp;&nbsp;Строка 1
&nbsp;&nbsp;&nbsp;Строка 2
*}

nl2br добавляет перед всеми символами новой строки (\n) тег <br />:

$smarty->assign('str', "Строка 1\nСтрока 2\nСтрока 3");
...
{$str|nl2br}
{* Выведет: 
Строка 1<br />
Строка 2<br />
Строка 3
*}

□ replace производит замену в строке. Эквивалент РНР-функции str_repiace () (см. разд. 5.15.4). В первом параметре указывается искомая строка, а во втором — строка для замены:

$smarty->assign('str', "Привет, Вася");
...
{$str|replace:"Вася":"Петя"} {* Выведет: Привет, Петя *}

□ regex_repiace производит замену в строке с помощью регулярных выражений. Эквивалент РНР-функции preg_repiace () . В первом параметре указывается регулярное выражение, а во втором — строка для замены. Удалим все пробельные символы в начале и конце строки:

$smarty->assign('str', "   \t  Строка  \r\n  ");
...
{$str|regex_replace:"/(^\s+)|(\s+$)/s":""}
{* Выведет: "Строка" *}

□ spacify вставляет указанный фрагмент между символами в строке. По умолчанию вставляется пробел:

$smarty->assign('str', 'Строка с пробелами');
...
{$str|spacify}
{* Выведет: С т р о к а   с   п р о б е л а м и *}
{$str|spacify:"-"}
{* Выведет: С-т-р-о-к-а- -с- -п-р-о-б-е-л-а-м-и *}

□ string_format производит форматирование строки:


$smarty->assign('str', 1256.5684);
...
{$str|string_format:"%.2f"} {* Выведет: 1256.57 *}

□ strip производит замену нескольких (идущих подряд) пробельных символов на пробел или указанный фрагмент:

$smarty->assign('str', "Строка \n\t с \r пробелами");
...
{$str|strip} {* Выведет: Строка с пробелами *}
{$str|strip:"&nbsp;"}
{* Выведет: Строка&nbsp;с&nbsp;пробелами *}

□ strip_tags удаляет из строки все HTML-тети. Если в качестве параметра указать значение true (значение по умолчанию), то теги будут заменяться на пробел, а если false — то никакой символ вставляться вместо тегов не будет:

$smarty->assign('str', "'<b>Строка</b>'");
...
{$str|strip_tags} {* Выведет: ' Строка ' *}
{$str|strip_tags:false} {* Выведет: 'Строка' *}

□ truncate обрезает строку до определенной длины. В первом параметре указывается максимальная длина строки (по умолчанию 80 символов). Во втором параметре можно задать фрагмент, который будет добавлен к обрезанной строке (но умолчанию ". . ."). Если в третьем параметре указать значение false (значение по умолчанию), то строка будет обрезана между словами, а если true — то будет строго учитываться длина строки. Если в четвертом параметре указать значение false (значение по умолчанию), то строка будет обрезана в конце, а если true — то в середине.

Пример:

$smarty->assign('str', 'Это очень длинная строка');
...
{$str|truncate:15}
{* Выведет: Это очень... *}
{$str|truncate:15:"...":true}
{* Выведет: Это очень дл... *}
{$str|truncate:15:"...":false:true}
{* Выведет: Это оч...строка *}

□ wordwrap позволяет разбить длинный текст на строки указанной длины. В первом параметре указывается количество символов, после которого вставляется символ новой строки (по умолчанию 80 символов). Во втором параметре задается фрагмент, который будет вставлен (по умолчанию "\п"). Если в третьем параметре указать значение false (значение по умолчанию), то перевод строки будет вставляться между словами, а если true — то будет строго учитываться длина фрагмента. Пример:

$smarty->assign('str', "Очень длинная строка");
...
{$str|wordwrap:5}
{* Выведет: 
Очень
длинная
строка
*}
{$str|wordwrap:5:"<br>":true}
{* Выведет: Очень<br>длинн<br>ая<br>строк<br>а *}

Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити