{VARIABLE}или например:
{% IF VARIABLE %} страшный код... {% ELSE %} еще более страшный код... {% ENDIF %}И видя этот хаос непонятных данных отпадает всякое желание что-то менять, более того спрашивать какие переменные есть на сайте, а каких нет, тоже довольно не удобно каждый раз задавай вопрос в техническую поддержку проекта и дожидаться ответа от нескольких минут до часа или двух.
Всё взвесив мы решили максимально сократить бюрократическую составляющую этого процесса и попытаться донести знания до людей. Для возможности каждому реализовывать свои самые смелые фантазии и воплощать палитру красочных идей в буйстве цветовых образов мы сделали две простых, но в то же время основополагающих вещи:
Ввели функции отображения всех переменные имеющиеся в шаблонах.
Вызываются они очень просто. Вставляете следующий код в любом из шаблонов, редактора тем:
{print_vars}чтобы отобразить список всех доступных на сайте переменных.
{print_arrays}чтобы отобразить список всех массивов доступных на сайте.
{print_r}чтобы отобразить и переменные и массивы
И свет информации начнёт пробиваться сквозь туман непонимания.
Документация по функциональным возможностям в работе с переменными ну и конечно же примеры
Честно сказать мы долго тянули с выкладыванием этой информации в свет, за что приносим всем заинтересованным лицам глубочайшие извинения. Документация в разрозненном виде была готова в мае-июне, но никак руки не доходили собрать все в едином месте, да и места куда выложить и обсудить тогда не было, сейчас есть, поэтому постараюсь ёмко но без занудства рассказать о нашем шаблонизаторе.
Итак, шаблонизатор использует 2 основных вида конструкций:
1) Вывод данных в различном формате
2) Логические операции
Пойдём по порядку.
Вывод данных
Вывод основной переменной
{PAGE_TITLE}выведет Заголовок страницы
Вывод переменной внутри цикла
{goods.name}Такой вид записи используется в циклах и в данном виде выведет название товара.
Дополнительная функциональность переменных
Для каждой переменной вывода например {PAGE_TITLE} можно использовать дополнительные обработчики, для приведения переменной к нужному формату. Вызываются они так: {VARIABLE | function} или {VARIABLE | function("")} для случая если нужно передать какие-то параметры функции. Вот список возможных операций с переменными:
1) json или json_encode
Кодирует переменную в json формат
Пример использования для переменной "VARIABLE" со значением 'тест':
Код:
{VARIABLE | json} {VARIABLE | json_encode}
Результат:
"\u0442\u0435\u0441\u0442"
"\u0442\u0435\u0441\u0442"
2) upper или strtoupper
Преобразует переменную к uppercase формату.
Пример использования для переменной "VARIABLE" со значением 'тест':
Код:
{VARIABLE | upper} {VARIABLE | strtoupper}Результат:
ТЕСТ
ТЕСТ
3) lower или strtolower
Преобразует переменную к lowercase формату.
Пример использования для переменной "VARIABLE" со значением 'TEST':
Код:
{VARIABLE | lower} {VARIABLE | strtolower}Результат:
test
test
4) length или strlen
Возвращает текстовую длину переменной
Пример использования для переменной "VARIABLE" со значением 'TEST':
Код:
{VARIABLE | length} {VARIABLE | strlen}Результат:
4
4
5) money или money_format
Форматирует цисло в строку валюты:
Пример использования для переменной "VARIABLE" со значением '1234.56' для локализации en_US
Код:
{VARIABLE | money} {VARIABLE | money_format}Результат:
USD 1,234.56
USD 1,234.56
6) stripslashes
удаляет слэши из переменной
Пример использования для переменной "VARIABLE" со значением 'текст \"тест\"'
Код:
{VARIABLE | stripslashes}Результат:
текст "тест"
7) urlencode
Форматирует переменную в формат url и возвращает строку, в которой все не алфавитно-числовые символы (кроме -_.) заменены на знак процентов (%) с последующими двумя 16-ричными цифрами и пробелами, кодированными как знаки плюс (+).Она кодируется тем же способом, что и post данные WWW-формы
Пример использования для переменной "VARIABLE" со значением 'текст \"тест\"'
Код:
{VARIABLE | urlencode}Результат:
%F2%E5%EA%F1%F2%20\%22%F2%E5%F1%F2\%22
8) urldecode
декодирует URL-закодированную строку.
Пример использования для переменной "VARIABLE" со значением '%F2%E5%EA%F1%F2%20\%22%F2%E5%F1%F2\%22'
Код:
{VARIABLE | urlencode}Результат:
текст \"тест\"
9) addslashes
Добавляет слэши для переменной
Пример использования для переменной "VARIABLE" со значением 'текст "тест"'
Код:
{VARIABLE | addslashes}Результат:
текст \"тест\"
10) nl2br
Заменяет все знаки переноса строки "\n" на "<br />"
Пример использования для переменной "VARIABLE" со значением "текст \n текст"
Код:
{VARIABLE | nl2br}Результат:
текст <br /> текст
11) strip_tags
Удаляет теги из строки. Наличие параметра в скобках обязательно
Пример использования для переменной "VARIABLE" со значением "<b>текст</b> <br /> текст"
А) Код:
{VARIABLE | strip_tags("")}Результат:
текст текст
Б) Код:
{VARIABLE | strip_tags("<b>")}Результат:
текст <br /> текст
12) str_repeat
Возвращает повторяющуюся строку. Наличие параметра в скобках обязательно
Пример использования для переменной "VARIABLE" со значением "Текст"
А) Код:
{VARIABLE | str_repeat("2")}Результат:
ТекстТекст
Б) Код:
{VARIABLE | str_repeat("4")}Результат:
ТекстТекстТекстТекст
13) number или number_format
Форматирует число с разделением групп. Наличие 3х параметров в скобках обязательно. Работает аналогично функции php number_format. Использует 3 параметра: точность округления, разделитель целого числа с дробной его частью, разделитель тысяч.
Пример использования для переменной "VARIABLE" со значением "1234.56"
А) Код:
{VARIABLE | number_format("2",","," ")} {VARIABLE | number_format("2",","," ")}Результат:
1 234,56
1 234,56
Б) Код:
{VARIABLE | number_format("3",".",",")} {VARIABLE | number_format("3",".",",")}Результат:
1,234.560
1,234.560
14) date
Форматирует дату/время из unix timestamp. Наличие параметра в скобках обязательно
Пример использования для переменной "VARIABLE" со значением "1289575231"
Код:
{VARIABLE | date("d.m.Y H:i:s")}Результат:
12.11.2010 15:20:31
15) is_divided
Делится ли переменная на число без остатка? Наличие 3х параметров в скобках обязательно. 1й параметр - число, на которое делим переменную, 2й параметр - результат в случае если переменная делится, 3й параметр - результат в случае если не делится
Пример использования для переменной "VARIABLE" со значением "5"
А) Код:
{VARIABLE | is_divided("5","</tr><tr>","")}Результат:
</tr><tr>
Б) Код:
{VARIABLE | is_divided("4","</tr><tr>","")}Результат:
Ничего не выведет
16) multiply
Умножить переменную на параметр указанный в скобках. Наличие параметра в скобках обязательно
Пример использования для переменной "VARIABLE" со значением "3"
Код:
{VARIABLE | multiply("4")}Результат:
12
17) divide
Разделить переменную на параметр указанный в скобках. Наличие параметра в скобках обязательно
Пример использования для переменной "VARIABLE" со значением "12"
Код:
{VARIABLE | divide("3")}Результат:
4
18) minus
Уменьшить переменную на параметр указанный в скобках. Наличие параметра в скобках обязательно
Пример использования для переменной "VARIABLE" со значением "12"
Код:
{VARIABLE | minus("3")}Результат:
9
19) plus
Увеличить переменную на параметр указанный в скобках. Наличие параметра в скобках обязательно
Пример использования для переменной "VARIABLE" со значением "12"
Код:
{VARIABLE | plus("8")}Результат:
20
20) gen_word_end
Дописать соответствующее окончание для слов, используется для отображения цифр с описанием. Наличие 3х параметров в скобках обязательно
Пример использования для переменной "VARIABLE" с различными занчениями "1", "2", "5", "11", "18", "21", "23" на примере количества товаров в категории
А) Значение "1".
Код:
{VARIABLE} товар{VARIABLE| gen_word_end("","а","ов")} в категорииРезультат:
1 товар в категории
б) Значение "2".
Код:
{VARIABLE} товар{VARIABLE| gen_word_end("","а","ов")} в категорииРезультат:
2 товара в категории
в) Значение "5".
Код:
{VARIABLE} товар{VARIABLE| gen_word_end("","а","ов")} в категорииРезультат:
5 товаров в категории
г) Значение "11".
Код:
{VARIABLE} товар{VARIABLE| gen_word_end("","а","ов")} в категорииРезультат:
11 товаров в категории
д) Значение "18".
Код:
{VARIABLE} товар{VARIABLE| gen_word_end("","а","ов")} в категорииРезультат:
18 товаров в категории
е) Значение "21".
Код:
{VARIABLE} товар{VARIABLE| gen_word_end("","а","ов")} в категорииРезультат:
21 товар в категории
ж) Значение "23".
Код:
{VARIABLE} товар{VARIABLE| gen_word_end("","а","ов")} в категорииРезультат:
23 товара в категории
21) money или money_format
Форматирует число с разделением групп. Наличие 1го и 2го параметра в скобках не обязательно. Если он или они указаны, то первый параметр определяет тэг, в котором будет отображаться информация о цене. По умолчанию это "span". Второй параметр определяет количество знаков после запятой. По умолчанию берёт количество знаков и формат отображения из настроек на сайте (Вкладка "Настройки" -> "Валюты").
Пример использования для переменной "VARIABLE" со значением "1234.56"
Пример использования для переменной "VARIABLE2" со значением "11"
Код:
{VARIABLE | money} {VARIABLE2 | money} {VARIABLE2 | money("div")} {VARIABLE2 | money("div", "5")}Результат видимый пользователю:
- 1234.56 рубля
- 11.00 рублей
- 11.00
рублей - 11.00000 рублей
- <span title="1 234 российских рубля 56 копеек"><span class="num">1 234,56</span><span>рублей</span></span>
- <spantitle="11,00 российских рублей"><spanclass="num">11,00</span> <span>рублей</span></span>
- <div title="11,00 российских рублей"><div class="num">11,00</div> <div>рублей</div></div>
- <div title="11,00000 российских рублей"><div class="num">11,00000</div><div>рублей</div></div>
Превращает код текстовых полей в HTML код
Пример использования для переменной "VARIABLE" со значением '<a href="e;http://{NET_DOMAIN}/...ная</a>'
Код:
{VARIABLE | htmlspecialchars_decode}Результат:
<a href="http://{NET_DOMAIN}/...}/">Главная</a>
P.S. Будьте осторожны при использовании декодирования в HTML, т.к. если превращать в код те поля, которые может редактировать пользователь, то может возникнуть проблема с безопасностью связанная с XSS.
Для отсутствия подобных проблем используйте данную возможность только для полей которые редактирует лишь администратор и не использовать её для отображения полей редактируемых пользователем.
23) convenient_date
Эта функция, которая позволяет рисовать красивую дату на основе шаблона результирующей строки.
Например для шаблона 'd (n) Y H:i' функция будет выводить
из "2015-05-16 12:53:28" > "16 мая 2015 12:53"
из "2020-06-03 15:20:58" > "3 июня 15:20"
Если же от текущего момента прошло меньше суток, например сейчас "2020-06-27 18:31:13" а дата вывода "2020-06-27 15:18:02", то результатом будет > "3 часа назад".
Всего функция принимает 3 аргумента, 2 аргумента, 1 аргумент, либо без указания любых аргументов:
{VARIABLE_TIME | convenient_date("d (n) Y", "d (n)", "0")} {VARIABLE_TIME | convenient_date("d (n) Y", "d (n)")} {VARIABLE_TIME | convenient_date("d (n) Y")} {VARIABLE_TIME | convenient_date}
Данные аргументов используются форматирования даты:https://www.php.net/...nction.date.php, а особый формат "(n)" - это красивое написание месяца на понятном человеку языке.
Первый аргумент используется для дат от 6 месяцев назад.
Второй аргумент используется для дат от текущего момента и до времени пол года назад.
Третий аргумент указывает нужно ли использовать особое форматирование дат для разницы во времени меньше 24 часов. Если значение равно 1, то будет включено форматирование для времени, которое было менее 24 часов назад. Формат вывода будет вот в таком виде:
17 часов назад
17 минут назад
17 секунд назад.
Если значение 3-го аргумента равно нулю, то дата будет выведена по формату дат от текущего момента до полугода назад, формат используется от второго аргумента.
Работает она так для сегодняшней даты 27.06.2020 17:00:00,форматирование данных за сутки выключено:
{VARIABLE_TIME | convenient_date("d (n) Y", "d (n)", "0")}результат для 18.06.2020: 18 июня
результат для 18.06.2019: 18 июня 2019
результат для 27.06.2020 : 27 июня
Для сегодняшней даты 27.06.2020 17:00:00, форматирование данных за сутки включено:
{VARIABLE_TIME | convenient_date("d (n) Y", "d (n)", "1")}либо
{VARIABLE_TIME | convenient_date("d (n) Y", "d (n)")}
результат для 18.06.2020: 18 июня
результат для 18.06.2019: 18 июня 2019
результат для 27.06.2020 : 17 часов назад.
Если второй аргумент не указан, то он будет установлен такой же как первый аргумент:
{VARIABLE_TIME | convenient_date("d (n) Y")}результат для 18.06.2020: 18 июня 2019
результат для 18.06.2019: 18 июня 2019
результат для 27.06.2020 : 17 часов назад.
Результат для отсутствия указания аргументов - будут указаны настройки дат по умолчанию, а именно ("d (n) Y", "d (n)") - для старых дат указывается год. Для новых дат год не указывается:
{VARIABLE_TIME | convenient_date)}результат для 18.06.2020: 18 июня
результат для 18.06.2019: 18 июня 2019
результат для 27.06.2020 : 17 часов назад
Логические операции
Они бывают следующих видов:
1) условия:
А) IF - условие используется для сравнения каких-либо данных. По умолчанию оно проверяет существование переменной и чтобы значение переменной было отлично от нуля. Так же сравнение может происходить с условиями
>= Значение должно быть больше или равно
<= Значение должно быть меньше или равно
> Значение должно быть больше
< Значение должно быть меньше
= Значение должно равняться
!= Значение не должно равняться
Для условия IF обязательно наличие закрывающего тега {% ENDIF %}
Примеры использования условия IF для переменной "VARIABLE" равной 1:
А) код:
{% IF VARIABLE %}Переменная указана{% ENDIF %}Результат:
Переменная указана
Б) код:
{% IF VARIABLE=1 %}Переменная равна единице{% ENDIF %}Результат:
Переменная равна единице
В) код:
{% IF VARIABLE!=2 %}Переменная не равна двум{% ENDIF %}Результат:
Переменная не равна двум
Г) код:
{% IF VARIABLE>=1 %}Переменная больше или равна 1{% ENDIF %}Результат:
Переменная больше или равна 1
Д) код:
{% IF VARIABLE>1 %}Переменная больше 1{% ENDIF %}Результат:
Ничего не выведет
Е) код:
{% IF VARIABLE<1 %}Переменная меньше 1{% ENDIF %}Результат:
Ничего не выведет
Примеры использования условия IF для переменной "VARIABLE" равной 0:
А) код:
{% IF VARIABLE %}Переменная указана{% ENDIF %}Результат:
Ничего не выведет
Б) код:
{% IF VARIABLE=1 %}Переменная равна единице{% ENDIF %}Результат:
Ничего не выведет
В) код:
{% IF VARIABLE==1 %}Переменная равна единице{% ENDIF %}Результат:
Ничего не выведет
Г) код:
{% IF VARIABLE!=2 %}Переменная не равна двум{% ENDIF %}Результат:
Переменная не равна двум
Д) код:
[code]{% IF VARIABLE>=1 %}Переменная больше или равна 1{% ENDIF %}[/code]
Результат:
Ничего не выведет
Е) код:
[code]{% IF VARIABLE>1 %}Переменная больше 1{% ENDIF %}[/code]
Результат:
Ничего не выведет
Ж) код:
[code]{% IF VARIABLE<1 %}Переменная меньше 1{% ENDIF %}[/code]
Результат:
Переменная меньше 1
б) ELSEIF Другое условие, если не прошло предыдущее. Работает точно так же как и условие IF, используется для удобства записи.
Пример использования для переменной "VARIABLE" равной 1
А) код:
[code]
{% IF VARIABLE=2 %}
Переменная равна двум
{% ELSEIF VARIABLE=1 %}
Переменная равна единице
{% ENDIF %}[/code]
Результат:
Переменная равна единице
Б) код:
[code]
{% IF VARIABLE>2 %}
Переменная больше двух
{% ELSEIF VARIABLE<1 %}
Переменная меньше единицы
{% ENDIF %}[/code]
Результат:
Ничего не выведет
в) IFNOT Условие отрицания. Работает так же как и IF условие, с той лишь разницей что условие не должно выполниться
Примеры использования для переменной "VARIABLE" равной 1
А) код:
[code]
{% IFNOT VARIABLE=2 %}
Переменная не равняется двум
{% ENDIF %}[/code]
Результат:
Переменная не равняется двум
Б) код:
[code]
{% IFNOT VARIABLE %}
Переменная не указана
{% ENDIF %}[/code]
Результат:
Ничего не выведет
г) ELSE условие которое выполниться если предыдущие условия не выполнились.
Пример использования для переменной "VARIABLE" равной 1
А) код:
[code]
{% IF VARIABLE=2 %}
Переменная равна двум
{% ELSE %}
Переменная не равна двум
{% ENDIF %}[/code]
Результат:
Переменная не равна двум
Б) код:
[code]
{% IF VARIABLE>5 %}
Переменная больше двух
{% ELSEIF VARIABLE<-5 %}
Переменная меньше единицы
{% ELSE %}
Переменная находится в диапазоне от -5 до 5
{% ENDIF %}
[/code]
Результат:
Переменная находится в диапазоне от -5 до 5
д) ENDIF закрывающий тег любых условий. Обязателен для нормальной работы условия.
е) Использование нескольких условий в одном.
Пример использования для переменной "VARIABLE1" равной 1 и VARIABLE2 равной 0
А) код:
[code]
{% IF VARIABLE1=1 && VARIABLE2<1 %}
Переменная VARIABLE1 равна 1, а VARIABLE2 меньше единицы
{% ELSE %}
Переменная VARIABLE1 не равна 1 либо VARIABLE2 Больше нуля
{% ENDIF %}[/code]
Результат:
Переменная VARIABLE1 равна 1, а VARIABLE2 меньше единицы
Б) код:
[code]
{% IF VARIABLE1 || VARIABLE2 %}
Одна из двух переменных указана
{% ELSEIF VARIABLE1<-5 && VARIABLE2=="тест" %}
Переменная VARIABLE1 меньше -5, а переменная VARIABLE2 равна тексту "тест"
{% ENDIF %}[/code]
Результат:
Одна из двух переменных указана
В) код:
[code]
{% IF VARIABLE1 && VARIABLE2 < 1 && VARIABLE3 < 1 %}
Переменная VARIABLE1 указана, а VARIABLE2 и VARIABLE3 не указаны, либо их значение равно нулю
{% ELSE %}
Не выполнилось одно из условий, это означает что либо не указана VARIABLE1, либо указана и больше нуля VARIABLE2, либо указана и больше нуля VARIABLE3
{% ENDIF %}[/code]
Результат:
Переменная VARIABLE1 указана, а VARIABLE2 и VARIABLE3 не указаны, либо их значение равно нулю
Г) код:
[code]
{% IFNOT VARIABLE1 && VARIABLE2 < 1 && VARIABLE3 < 1 %}
Переменная VARIABLE1 НЕ указана, а VARIABLE2 и VARIABLE3 не указаны, либо их значение равно нулю
{% ELSE %}
Не выполнилось одно из условий, это означает что либо УКАЗАНА VARIABLE1, либо указана и больше нуля VARIABLE2, либо указана и больше нуля VARIABLE3
{% ENDIF %}[/code]
Результат:
Не выполнилось одно из условий, это означает что либо УКАЗАНА VARIABLE1, либо указана и больше нуля VARIABLE2, либо указана и больше нуля VARIABLE3
Д) код:
[code]
{% IFNOT VARIABLE1 %}
Переменная VARIABLE1 НЕ указана
{% ELSEIF VARIABLE2 < 1 && VARIABLE3 < 1 %}
VARIABLE1 указана. Выполнилось второе условие, т.к. VARIABLE2 и VARIABLE3 не указаны, либо их значение равно нулю
{% ELSE %}
Не выполнилось одно из условий, это означает что либо УКАЗАНА VARIABLE1, либо указана и больше нуля VARIABLE2, либо указана и больше нуля VARIABLE3
{% ENDIF %}[/code]
Результат:
VARIABLE1 указана. Выполнилось второе условие, т.к. VARIABLE2 и VARIABLE3 не указаны, либо их значение равно нулю
2) Циклы:
А) Оператор FOR используется для массивов данных вида "data_array" мы в своей работе все переменные массивов стараемся называть в lowercase формате для удобства и лучшего понимания.
Примеры использования для массива "data_array" со списком из 2х элементов в которых используются переменные "ID" и "NAME"
1й элемент - "ID" = "1" , "NAME" "Название 1"
2й элемент - "ID" = "2" , "NAME" "Название 2"
Код:
[code]{% FOR data_array %}
Идентификатор - {data_array.ID}
Название - {data_array.NAME}
<hr />
{% ENDFOR %}[/code]
Результат:
Идентификатор - 1
Название - Название 1
<hr />
Идентификатор - 2
Название - Название 2
<hr />
Для выдачи списка данных вложенного массива используется вызов вложенного массива, без указания родительского массива. Для переменных же используется полный путь!
Например для массива "data_array" есть вложенный массив "sub_data_array" в котором есть 2 элемента как в предыдущем примере ("ID" и "NAME")
1й элемент - "ID" = "1" , "NAME" "Вложенное название 1"
2й элемент - "ID" = "2" , "NAME" "Вложенное Название 2"
Код:
[code]{% FOR data_array %}
{% FOR sub_data_array %}
Идентификатор - {data_array.sub_data_array.ID}
Название - {data_array.sub_data_array.NAME}
<br />
{% ENDFOR %}
<hr />
{% ENDFOR %}[/code]
Результат:
Идентификатор - 1
Название - Вложенное название 1
<br />
Идентификатор - 2
Название - Вложенное название 2
<br />
<hr />
б) ENDFOR закрывающий тег для циклов, если открыли цикл, не забывайте его закрывать, это фатально для работы шаблона.
в) Дополнительная функциональность для массивов. Для любого массива кроме основных данных создаются дополнительные переменны, в lowercase формате для понимания, что они служебные. Вот список этих переменных:
- length количество элементов в массиве
- index номер текущей итерации
- index0 номер текущей итерации (считая от нуля)
- rindex сколько элементов осталось
- rindex0 сколько элементов осталось (считая от нуля)
- first является ли итерация первой?
- last является ли итерация последней?
Пример использовния для массива "data_array" со списком из 2х элементов в которых используются переменные "ID" и "NAME" так же как в первом примере
Код:
[code]{% FOR data_array %}
количество элементов в массиве - {data_array.length}<br />
номер текущей итерации - {data_array.index}<br />
номер текущей итерации (считая от нуля) - {data_array.index0}<br />
сколько элементов осталось - {data_array.rindex}<br />
сколько элементов осталось (считая от нуля) - {data_array.rindex0}<br />
является ли итерация первой? - {data_array.first}<br />
является ли итерация последней? - {data_array.last}<br />
<hr />
{% ENDFOR %}[/code]
Результат:
количество элементов в массиве - 2<br />
номер текущей итерации - 1<br />
номер текущей итерации (считая от нуля) - 0<br />
сколько элементов осталось - 1<br />
сколько элементов осталось (считая от нуля) - 2<br />
является ли итерация первой? - 1<br />
является ли итерация последней? - 0<br />
<hr />
количество элементов в массиве - 2<br />
номер текущей итерации - 2<br />
номер текущей итерации (считая от нуля) - 1<br />
сколько элементов осталось - 0<br />
сколько элементов осталось (считая от нуля) - 1<br />
является ли итерация первой? - 0<br />
является ли итерация последней? - 1<br />
<hr />