Перейти к содержимому


Упрощаем работу с шаблонами


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 100

#1 d.stepachev

d.stepachev

    Администратор

  • Администраторы
  • 32 сообщений
  • ГородМосква

Отправлено 12 Ноябрь 2010 - 01:55

Довольно часто в нашей практике случается так что хочется изменить шаблон, сделать его под себя, более уютным и домашним, но возникает не разрешимая проблема когда нужно понять что это за не понятные конструкции вида
{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 рублей
Результат в HTML коде:
  • <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>
22) htmlspecialchars_decode
Превращает код текстовых полей в HTML код
Пример использования для переменной "VARIABLE" со значением '&lt;a href=&quote;http://{NET_DOMAIN}/...ная&#60;/a&#62;'
Код:
{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 />


#2 Antonio

Antonio

    Пользователь

  • Пользователи
  • PipPip
  • 48 сообщений
  • ГородНовосибирск

Отправлено 29 Апрель 2011 - 05:55

Пытаюсь использовать функцию upper, ничего не происходит:
<p id="breadcrumb">Вы здесь: <a href="http://{NET_DOMAIN}/...}/">Главная</a> > <strong>{PAGE_NAME | upper}</strong></p>

Еще делаю такую конструкцию:
{% IF PAGENAME != "Каталог товаров" %}
<h1>{PAGE_NAME}</h1>
{% ENDIF %}
<p>
  <!-- Контент страницы -->
    {PAGE_CONTENT}

    <!-- Короткое SEO-описание -->
    {% IF PAGE_SEO_DESCRIPTION_SHORT %}
      <div style="padding-top:1em;">{PAGE_SEO_DESCRIPTION_SHORT}</div>
    {% ENDIF %}
    <!-- END Короткое SEO-описание -->
    
    <!-- Полное SEO-описание -->
    {% IF PAGE_SEO_DESCRIPTION_LARGE %}
      <div style="padding-top:1em;">{PAGE_SEO_DESCRIPTION_LARGE}</div>
    {% ENDIF %}
    <!-- END Полное SEO-описание -->
</p>

Однако здесь не выводится и контент страницы, не только заголовок

#3 support

support

    Активный участник

  • Модераторы
  • 3 686 сообщений
  • ГородМосква

Отправлено 29 Апрель 2011 - 16:00

Просмотр сообщенияAntonio (29 Апрель 2011 - 05:55) писал:

Пытаюсь использовать функцию upper, ничего не происходит:
<p id="breadcrumb">Вы здесь: <a href="http://{NET_DOMAIN}/...}/">Главная</a> > <strong>{PAGE_NAME | upper}</strong></p>
Скорее всего дело в локализации было и русских буквах в utf-8... В общем ошибку разработчики исправили, можете работать. Баланс магазина пополнили за нахождение ошибки на 500 руб.

Просмотр сообщенияAntonio (29 Апрель 2011 - 05:55) писал:

Пытаюсь использовать функцию upper, ничего не происходит:
<p id="breadcrumb">Вы здесь: <a href="http://{NET_DOMAIN}/...}/">Главная</a> > <strong>{PAGE_NAME | upper}</strong></p>

Еще делаю такую конструкцию:
{% IF PAGENAME != "Каталог товаров" %}
<h1>{PAGE_NAME}</h1>
{% ENDIF %}
<p>
  <!-- Контент страницы -->
    {PAGE_CONTENT}

    <!-- Короткое SEO-описание -->
    {% IF PAGE_SEO_DESCRIPTION_SHORT %}
      <div style="padding-top:1em;">{PAGE_SEO_DESCRIPTION_SHORT}</div>
    {% ENDIF %}
    <!-- END Короткое SEO-описание -->
    
    <!-- Полное SEO-описание -->
    {% IF PAGE_SEO_DESCRIPTION_LARGE %}
      <div style="padding-top:1em;">{PAGE_SEO_DESCRIPTION_LARGE}</div>
    {% ENDIF %}
    <!-- END Полное SEO-описание -->
</p>

Однако здесь не выводится и контент страницы, не только заголовок
В проверке вы используете кавычки:
{% IF PAGENAME != "Каталог товаров" %}

и используете не существующую переменную PAGENAME, есть только PAGE_NAME...
Из-за них не проходит проверка, система ищет кавычки и название вида
"Каталог товаров"
, более того она ищет этот текст в несуществующей переменной... По идее после того как убирёте кавычки и измените название все будет работать :)

Пример рабочего кода:
{% IF PAGE_NAME !=Каталог товаров %}
  <h1>{PAGE_NAME}</h1>
{% ENDIF %}


#4 krandv

krandv

    Новичок

  • Пользователи
  • Pip
  • 7 сообщений

Отправлено 01 Май 2011 - 15:21

Большое спасибо за подсказку про сравнение строк. Никогда в жизни не догодался бы. Есть ли возможность в условиях IF использовать логические операции AND и OR? AND сделать легко через двойной IF. А вот как сделать OR?

#5 Antonio

Antonio

    Пользователь

  • Пользователи
  • PipPip
  • 48 сообщений
  • ГородНовосибирск

Отправлено 03 Май 2011 - 18:48

Спасибо за ответ! И отдельное спасибо за 500 рублей  :D

#6 Antonio

Antonio

    Пользователь

  • Пользователи
  • PipPip
  • 48 сообщений
  • ГородНовосибирск

Отправлено 03 Май 2011 - 18:53

Просмотр сообщенияkrandv (01 Май 2011 - 15:21) писал:

Большое спасибо за подсказку про сравнение строк. Никогда в жизни не догодался бы. Есть ли возможность в условиях IF использовать логические операции AND и OR? AND сделать легко через двойной IF. А вот как сделать OR?

Как вариант через IF и ELSEIF

#7 daina.storeland.ru

daina.storeland.ru

    Пользователь

  • Пользователи
  • PipPip
  • 11 сообщений

Отправлено 06 Июль 2011 - 18:01

Подскажите, а где можно еще какую-нибудь документацию почитать по шаблонизатору, по конкретным шаблонам? Как с этим разбираться новичку? :mellow:

#8 a.pashuta

a.pashuta

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 1 072 сообщений

Отправлено 07 Июль 2011 - 10:55

Просмотр сообщенияdaina.storeland.ru (06 Июль 2011 - 18:01) писал:

Подскажите, а где можно еще какую-нибудь документацию почитать по шаблонизатору, по конкретным шаблонам? Как с этим разбираться новичку? :mellow:
К сожалению, какой-то конкретной литературы по изменению шаблонов нет. Она находится в стадии разработки. Пока можем предложить почитать следующие ветки форума:
Вопросы новичка.
Дизайн.

#9 ReWa

ReWa

    Новичок

  • Пользователи
  • Pip
  • 5 сообщений

Отправлено 12 Август 2011 - 02:17

Есть вопрос относительно синтаксиса вложенных выражений. Пример
{% FOR catalog %}
{% IF catalog.index | is_divided("2", "", "0")=0 %}
<li class="odd">
{% ELSE %}
<li class="even">
{% ENDIF %}
<a href="{catalog.URL}">{catalog.NAME}</a></li>
{% ENDFOR %}
В данном случае на страницу вываливается почему-то только класс "odd", во вторую ветку условия цикл не попадает вообще.
Подскажите, в чём ошибка?

#10 Vaccina

Vaccina

    Активный участник

  • Модераторы
  • 24 353 сообщений

Отправлено 12 Август 2011 - 22:02

Хм. если не ошибаюсь - то в логическом выражении нельзя использовать более одного условия.

#11 ReWa

ReWa

    Новичок

  • Пользователи
  • Pip
  • 5 сообщений

Отправлено 12 Август 2011 - 22:25

Если я правильно понял "местный" синтаксис, то в выражении
{% IF catalog.index | is_divided("2","","0")=0 %}
только одно условие.

Ещё вопрос, объявлять свои переменные нельзя никак?

#12 Vaccina

Vaccina

    Активный участник

  • Модераторы
  • 24 353 сообщений

Отправлено 12 Август 2011 - 22:48

Хм в данном логическом выражении следующие условия
catalog.index
is_divided("2","","0")=0
(catalog.index) | (is_divided("2","","0")=0)


#13 ReWa

ReWa

    Новичок

  • Пользователи
  • Pip
  • 5 сообщений

Отправлено 12 Август 2011 - 23:08

Это как так? Я пытался реализовать проверку на чётность индекса. Может подскажете тогда как правильно?

#14 Vaccina

Vaccina

    Активный участник

  • Модераторы
  • 24 353 сообщений

Отправлено 14 Август 2011 - 02:51

вам нужно использовать

15) is_divided
 Делится ли переменная на число без остатка? Наличие 3х параметров в скобках обязательно. 1й параметр - число, на которое делим переменную, 2й параметр - результат в случае если переменная делится, 3й параметр - результат в случае если не делится
 Пример использования для переменной "VARIABLE" со значением "5"
 А) Код:
  {VARIABLE | is_divided("5","</tr><tr>","")}

в вашем случае это

{catalog.index | is_divided("2","","0")}

#15 ReWa

ReWa

    Новичок

  • Пользователи
  • Pip
  • 5 сообщений

Отправлено 14 Август 2011 - 23:50

Конструкция вида
{% IF {catalog.index | is_divided("2","","0")}=0 %}
...
{% ENDIF %}

вызывает белый экран. В чём здесь проблема?

#16 ReWa

ReWa

    Новичок

  • Пользователи
  • Pip
  • 5 сообщений

Отправлено 15 Август 2011 - 09:16

Спасибо за "помощь", разобрался сам.

#17 Antonio

Antonio

    Пользователь

  • Пользователи
  • PipPip
  • 48 сообщений
  • ГородНовосибирск

Отправлено 20 Август 2011 - 19:14

Добрый вечер. Хочу сделать, чтобы в категории товаров для каждого товара указывалась цена на единицу измерения, например 470 руб./м2

Вот код, который вроде должен это делать, однако, почему-то единица измерения не отображается
            {% FOR goods %}
              <td class="goodsListItem">  
                <div class="goodsListItemBlock withBorder cornerAll">
                  <div class="goodsListItemImage"><a href="{goods.URL}"><img src="{% IF goods.IMAGE_EMPTY %}{ASSETS_IMAGES_PATH}no-photo-small.png{% ELSE %}{goods.IMAGE_SMALL}{% ENDIF %}" alt="{goods.NAME}" /></a></div>
                  <h3 class="goodsListItemName"><a href="{goods.URL}">{goods.NAME}</a></h3>
                  <div class="goodsListItemPriceNew">
                    <a href="{goods.URL_MIN_PRICE_NOW}">{goods.MIN_PRICE_NOW} руб./{% FOR mods %}{% IF mods.first %}{mods.MEASURE_NAME}{% ENDIF %}{% ENDFOR mods %}</a>
                  </div>  
                  <div class="goodsListItemPriceOld">
                    {% IF goods.MIN_PRICE_NOW_WITHOUT_DISCOUNT>goods.MIN_PRICE_NOW %}
                      <a href="{goods.URL_MIN_PRICE_NOW_WITHOUT_DISCOUNT}" class="lineThrough">{goods.MIN_PRICE_NOW_WITHOUT_DISCOUNT | money_format}</a>
                    {% ELSEIF goods.MIN_PRICE_OLD>goods.MIN_PRICE_NOW %}
                      <a href="{goods.URL_MIN_PRICE_OLD}" class="lineThrough">{goods.MIN_PRICE_OLD | money_format}</a>
                    {% ENDIF %}
                  </div>
                </div>
              </td>
              {goods.index | is_divided("4","</tr><tr>","")}
            {% ENDFOR goods %}


Все, разобрался, спасибо!
надо было использовать конструкцию goods.mods.MEASURE_NAME

Сообщение отредактировал Antonio: 21 Август 2011 - 18:18


#18 Antonio

Antonio

    Пользователь

  • Пользователи
  • PipPip
  • 48 сообщений
  • ГородНовосибирск

Отправлено 30 Август 2011 - 18:19

Добрый день! Подскажите, пожалуйста, можно ли к элементу массива обратиться по индексу? Например, catalog[0].NAME...

#19 Vaccina

Vaccina

    Активный участник

  • Модераторы
  • 24 353 сообщений

Отправлено 30 Август 2011 - 22:14

Думаю что напрямую не получиться. Только через цикл.

#20 Antonio

Antonio

    Пользователь

  • Пользователи
  • PipPip
  • 48 сообщений
  • ГородНовосибирск

Отправлено 31 Август 2011 - 10:39

Ясно, спасибо




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных