Справка
Базовые
Перечисленные в этом разделе методы являются отправной точкой для создания цепочек команд.
Некоторые из перечисленных команд доступны из самого первого окна визуального редактора. Остальные сгруппированы под соответствующими кнопками редактора.
В зависимости от предназначения кода набор команд может меняться. Например, при работе с частью модуля будут доступны опции "Текущий экземпляр" и "Текущий модуль".
Код: [cow]
Условие для использования: Текущая часть используется в URL разборе в связке с таблицей
Результат: Объект
Например, создадим часть "Вывод статьи" и свяжем её с таблицей "Статьи". При открытии адреса /article123 будет произведён поиск статьи с таким URL и, если она будет найдена, то произойдёт вызов этой части. При этом, команда [cow] будет ссылаться на найденную статью. Таким образом, можно легко получить доступ к текущей статье и её переменным, например [cow.title], [cow.body] и т.д.
Можно получить доступ к текущему объекту вышестоящей части, если использовать команду [pup], например [pup.cow]. Если необходимо перепрыгнуть через несколько частей, можно использовать [pup] несколько раз - [pup.pup.cow] и т.д.
Кроме URL-определённого объекта, cow также может означать текущий объект в обработчике. Например, в обработчике при редактировании таблицы или её переменной.
Код: [cex]
Условие для использования: Если редактируемый код находится внутри модуля
Результат: Экземпляр
Код: [cm]
Условие для использования: Если редактируемый код находится внутри модуля
Результат: Модуль
Код: [global]
Псевдонимы: glob
Результат: Глобальные
Примеры использования
Установить значение: [glob.x=1]
Вывести значение: [glob.x]
Установить значение массива: [glob.x[1]=1]
Получить доступ к таблице "Статьи" модуля "Журнал" (базового экземпляра):
[glob.modules.journal.basic.articles]
Сгенерировать случайное число:
[glob.rand(1,50)]
Код: [current_col]
Псевдонимы: cucol
Условие для использования: Код помещён в обработчик для переменной таблицы
Результат: Поле объекта
Код: [param]
Результат: различный
Можно использовать двумя способами - указывая префикс [param.name] или же используя знак доллара [$name]
Переменные поддерживают работу с многомерными массивами.
Например [$array[1][2][3]=1].
Для обнуления массива используйте [array=''].
При приравнивании переменной не обязательно указывать знак $ или префикс param.
При передаче переменных в часть или компонент, названия переменных указываются также без символа $ и префикса param. Например: [function.header(type='location')]
В этом примере мы передали переменную type с значением 'location' в функцию header.
Если переменная указана, как переменная части, с настройкой доступа GET/POST, то через неё можно будет получить доступ к соответствующей GET/POST переменной. В противном случае, доступ к переменной GET/POST можно только через специальные команды Переменная из GET и Переменная из POST.
Код: [component]
Результат: различный
Переменные для компонента указываются в скобках через запятую, с указанием названия переменной.
Пример:
[component.slider(images=cex.images.rows, title=)]
Можно работать с результатом выполнения компонента, например:
[component.get_weather(town=user.town).length]
Многие типы данных позволяют вызывать компонент непосредственно из цепочки команд. В этом случае значению главной переменной компонента присваивается результат цепочки.
Для этого, перед вызовом компонента укажем знак нижнего подчёркивания.
Например:
['Moscow'._component.get_weather]
Что будет аналогично:
[component.get_weather(town='Moscow')]
Код: [user]
Результат: Пользователь
Сам по себе [user] содержит идентификатор пользователя (если пользователь авторизован).
Код: [group]
Результат: Группа пользователей
Пример использования:
[group.writers]
Где writers - группа "Писатели".
Более конкретный пример, который выведет всех пользователей группы:
[tree group.writers.users]
[cur.name]
[/tree]
Код: [widget]
Условие для использования: Используется в том случае, когда доступен хотябы один виджет
Результат: различный
Полный синтаксис выглядит так:
[widget.module.ex.name(param1=value1, paramN=valueN)]
Где [module] - название модуля, [ex] - название экземпляра и [name] - название самого виджета.
Если в качестве передаваемых переменных выступают объекты, они записываются следующим образом (на примере блока популярных статей):
[widget.articles.base.block_popular
(block_tpl=uin:49635da39:'Обычный')]
Где после 'uin:' следует уникальный идентификатор объекта (в примере он умышленно сокращён, для корректного отображения), а затем идёт значение его главной переменной (для удобства распознавания).
Визуальный редактор самостоятельно получает данную конструкцию при визуальной генерации кода.
Код: [part_param]
Условие для использования: Используется тогда, когда у текущей части есть хотябы один параметр
Результат: различный
Переменные части записываются аналогично обычным переменным (через [param.name] либо [$name])
Код: [type]
Результат: Значение (текст, числа, дата)
Код: [cancel?]
Результат: Значение (текст, числа, дата)
Код: [ajax?]
Результат: Значение (текст, числа, дата)
Код: [zone_specify]
Результат: Значение (текст, числа, дата)
К примеру, если значение IP-конфигурации содержит 'yandex.ru', и пользователь перешёл с данного сайта, то в [zone_specify] будет указан referer (URL, с которого перешёл пользователь).
Если IP-конфигурация будет содержать разрешённое название браузера, то [zone_specify] будет содержать USER_AGENT посетителя.
Предполагается использование данной переменной для подстройки контента страницы для пользователей, пришедших с разных источников или же заходящих на сайт с разных браузеров.
Код: [zone_email]
Результат: Значение (текст, числа, дата)
Если для зоны/сайта определён email, то выдаёт его.
Иначе выдаёт email администратора из настроек системы.
Если и он не был указан, то выдаёт email такого вида: system@domain.zone (где domain.zone - адрес текущего открытого сайта).
Код: [post_files]
Псевдонимы: post_file
Результат: Массивы
Код: [zone_name]
Результат: Значение (текст, числа, дата)
Код: [zone_type]
Результат: Значение (текст, числа, дата)
Тип можно сопоставить с помощью констант:
Тип зоны "обычный сайт"
и
Тип зоны "административный кабинет"
Код: [import]
Условие для использования: Часть работает с импортом
Результат: Значение (текст, числа, дата)
Для частей, занимающихся обработкой импорта из административного кабинета.
Код: [f_action]
Результат: Значение (текст, числа, дата)
Содержит либо ['add'], в случае, если происходит добавление. Либо ['edit'], если происходит редактирование.
Код: [f_type]
Результат: Значение (текст, числа, дата)
Возможные значения:
['onedit'] - обработчик изменения/добавления (для переменной таблицы)
['onform'] - обработчик вывода формы
['onshow'] - обработчик отображения
['onedit2'] - обработчик изменения/добавления (для таблицы)
['top'] - шапка таблицы
['bottom'] - подвал таблицы
Код: [is_404]
Результат: Значение (текст, числа, дата)
Код: [season]
Результат: Значение (текст, числа, дата)
['winter'], ['spting'], ['summer'], ['autumn'] в зависимости от текущего сезона
Код: [season_num]
Псевдонимы: season2
Результат: Значение (текст, числа, дата)
0 - зима, 1 - весна, 2 - лето, 3 - осень.
Код: [is_admin?]
Результат: Значение (текст, числа, дата)
Код: [admin_url]
Результат: Значение (текст, числа, дата)
Код: [a_rows]
Условие для использования: Используется в обработчике подвала таблицы
Результат: Массивы
Код: [a_rows_sel]
Псевдонимы: a_rows2
Условие для использования: Используется в обработчике подвала таблицы
Результат: Массивы
Код: [get]
Результат: Значение (текст, числа, дата)
Пример
Открываем в браузере site.com/page?x=1
Получаем переменную X - [get.x]
Кроме этого, переменную X можно получить через [$x] в случае, если в настройках включена опция "Разрешить использовать переменные GET и POST как обычные переменные", либо соответствующая переменная существует в переменных части с разрешением использовать её через GET/POST.
Код: [post]
Результат: Значение (текст, числа, дата)
Пример
Получаем переменную X, отправленную через форму - [post.x]
Кроме этого, переменную X можно получить через [$x] в случае, если в настройках включена опция "Разрешить использовать переменные GET и POST как обычные переменные", либо соответствующая переменная существует в переменных части с разрешением использовать её через GET/POST.
Код: [lu]
Результат: Пользователь
Код: [backrow]
Результат: Объект
Код: [col_current]
Содержит ссылку на текущую переменную.
Пример использования:
[col_current.set('Новое значение')] - установить новое значение
[col_curent.value] - вывести значение
Подробнее об обработчиках переменных тут
Код: [cook]
Допускается следующее использование
Вывести cookie: [cook.name]
Установить cookie: [cook.name='value']
С cookie также можно работать как с массивами. Например:
[cook.name[1]='value'] и [cook.name[1]]
Также можно использовать многомерные массивы. В данном исполнении каждый элемент массива будет занимать отдельную переменную в браузере пользователя. Для использования сериализованных массивов используйте метод Переменная-массив cookies.
Для обнуления cookies просто приравняйте переменной пустое значение, например [cook.var='']
Код: [scook]
В данной реализации все элементы одного массива хранятся как одна сериализованная переменная.
Удалить элемент такого массива можно точно также, как и у обычного: [scook.x=scook.x.del(Index)],
где Index - номер удаляемого элемента.
Код: [url]
Результат: Значение (текст, числа, дата)
Если перед вызовом метода были использованы операции по модификации текущего URL, то выведет модифицированный URL.
Если у метода определены параметры новой переменной, то добавляет в URL новую переменную с указанным значением, либо заменяет значение переменной, если указанная переменная уже присутствует в текущем URL.
Пример
Изначальный URL: site.com/page?num=1
[url] выдаст ['site.com/page?num=1']
Если после этого мы вызовем
[url 'arg' 'val'], то [url] выдаст ['site.com/page?num=1&arg=val']
Если после этого мы вызовем
[url 'num' '200'], то [url] выдаст ['site.com/page?num=200&arg=val']
Существуют также команда Удалить переменную из URL
Код: [url2]
[url name val] + [url]
Подробнее смотрите тут Текущий URL
Код: [url3]
Подробнее смотрите тут Текущий URL
Код: [url4]
[url name val] + [url] + [url4 name]
или
[url2 name val] + [url4 name]
Подробнее смотрите тут Текущий URL
Код: [subdomain]
Результат: Значение (текст, числа, дата)
Полезно на сайтах, у которых установлены "Автоматические поддомены" в "Превращать поддомены в переменную subdomain".
Например, если у сайта есть множество доменов, связанных с различными городами, то переменную subdomain можно использовать для фильтрации объектов по городу.
Код: [subdomain_point]
Псевдонимы: subdomain2
Результат: Значение (текст, числа, дата)
Код: [host]
Результат: Значение (текст, числа, дата)
Содержит:
- тип протокола (http или https),
- домен,
- папку, в которую установлена система (если она установлена не в корень)
- виртуальную директорию (папку) зоны (если таковая определена)
- слеш в конце
Код: [host_strip]
Псевдонимы: host2
Результат: Значение (текст, числа, дата)
Код: [uprefix]
Результат: Значение (текст, числа, дата)
Например, для того, чтобы в интернет магазине сделать ссылку на части-корзину можно указать [uprefix]/cart.
Впоследствии [uprefix] будет заменён на адрес той страницы, к которой присоединён интернет-магазин.
Код: [http_host]
Псевдонимы: host3
Результат: Значение (текст, числа, дата)
Код: [host_major]
Псевдонимы: host4
Результат: Значение (текст, числа, дата)
Необходимо для сайтов, использующих редирект по принципу "клон" (т.е. для склеенных сайтов). В этом случае, [host_major] выдаст URL основного домена.
Код: [host_xname]
Псевдонимы: host5
Результат: Значение (текст, числа, дата)
Код: [host_nofolder]
Псевдонимы: host6
Результат: Значение (текст, числа, дата)
Код: [host_auto_subdomain]
Результат: Значение (текст, числа, дата)
Код: [rel_dir]
Результат: Значение (текст, числа, дата)
Код: [g_url]
Результат: Значение (текст, числа, дата)
Например, система установлена в каталог /test, а текущая зона настроена на работы из под виртуальной папки /run
Таким образом, наш путь до сайта будет выглядеть так: ['domain.com/test/run']
Всё, что будет идти после этого адреса попадёт в переменную [g_url]
Код: [a_url_ampersand]
Псевдонимы: a_url2
Результат: Значение (текст, числа, дата)
Код: [a_inputs]
Результат: Значение (текст, числа, дата)
Код: [fullurl]
Результат: Значение (текст, числа, дата)
Код: [lefturl]
Результат: Значение (текст, числа, дата)
Например, у нас есть URL ['domain.com/shop/cart/item']
Для части, отображающей страницы (которая загрузила страницу shop), неразобранный URL будет содержать ['cart/item']
А для части, отображающей корзину интернет-магазина, неразобранный URL, будет содержать только ['item'].
Код: [case_url]
Условие для использования: Код помещён в условие для запуска части
Результат: Значение (текст, числа, дата)
Код: [modurl]
Результат: Значение (текст, числа, дата)
Например, если мы открываем URL
['domain.com/shop/cart'] (модуль "Интернет-магазина" прикручен к странице ['shop'])
То для модуля магазин [modurl] будет равен ['domain.com/shop']
Код: [modurl_slash]
Псевдонимы: modurl2
Результат: Значение (текст, числа, дата)
Код: [admin_row_url]
Результат: Значение (текст, числа, дата)
Код: [continue]
Код: [skip_tree_optimization]
По умолчанию, цикл при первом проходе выявляет используемые поля объекта и подгружает такие же поля для остальных объектов цикла.
Данная команда позволяет отключить данную оптимизацию, т.к. она не всегда может быть уместна.
Код: [step]
Результат: Значение (текст, числа, дата)
Рассмотрим пример перебора дерева страниц:
[tree cex.pages.rows]
[if step>2] [pass] [/if]
[/tree]
В этом примере мы пропускаем все страницы, глубже 2ого уровня вложенности.
Такого же результата можно добиться за счёт флага deep(2) в цикле:
[tree deep(2) cex.pages.rows]
Код: [index]
Результат: Значение (текст, числа, дата)
Код: [first?]
Результат: Значение (текст, числа, дата)
Например выведем навигацию подстраниц:
[tree cow.sub]
[if first?] Подстраницы: [/if]
[if !first?] , [/if]
[cur.title]
[/tree]
см.также Это последний элемент перебора?
Код: [last?]
Результат: Значение (текст, числа, дата)
Например выведем навигацию подстраниц:
[tree cow.sub]
[cur.title]
[if last?] . (точка) [else] , (запятая) [/if]
[/tree]
см.также Это первый перебор перебора?
Код: [count]
Результат: Значение (текст, числа, дата)
Код: [min]
Условие для использования: Вызывается внутри числовых циклов
Результат: Значение (текст, числа, дата)
Код: [max]
Условие для использования: Вызывается внутри числовых циклов
Результат: Значение (текст, числа, дата)
Код: [up]
Результат: различный
Можно использовать чередование [up] для доступа к циклу на несколько уровней выше текущего. Например [up.up.up] и т.д.
Пример
Будем перебирать комментарии страниц
[tree cex.pages.rows]
[x=cur.title]
[tree cur.comments.rows]
[y=up.title]
[/tree]
[/tree]
В данном примере [up.title] будет равносильна вызову [cur.title] в вышестоящем цикле и выдаст имя текущей перебираемой страницы. X будет равен Y.
Также можно получать доступ к другим параметрам цикла, например:
[up.var] см.Индекс текущего элемента цикла
[up.index] см.Номер этапа текущего перебора
[up.value] см.Текущий элемент перебора, его значение
Код: [addrow]
Альтернативой является метод таблицы add.
Перед вызовом [addrow] необходимо подготовить переменные, которые будут присвоены объекту (если это необходимо).
Аналогичным образом подготавливаются переменные для команды Изменить (без обработчиков).
Для этого используются конструкции такого вида:
["имя переменной"->"значение"]
Если переменная является множественной ссылкой, то добавить к ней несколько значений можно с помощью оператора:
["имя переменной"+>"дополнительное значение"]
Перед определением списка параметров рекомендуется вставлять команду [start_operation] (Подготовка перед добавлением или изменением), обнуляющая подготовленные переменные (также они автоматически обнуляются после добавления или удаления объекта).
Пример. Добавим статью.
[start_operation]
['title'->'Заголовок статьи']
['body'->'Текст статьи']
['tags'->cex.tags.get('Важное')]
['tags'+>cex.tags.get('Интересное')]
[addrow cex.articles]
Альтернативный метод:
[cex.articles.add(title='Заголовок', tags=cex.tags.get('Важное') +cex.tags.get('Интересное'))]
В качестве таблицы может выступать подтаблица какого-либо объекта.
Например: [addrow cow.article.comments]
Если использовать флаг [force], будут проигнорированы обработчики таблицы и переменных.
Если использовать флаг [icache] не будет очищен кеш для связанных с данной таблицей шаблонов.
Пример использование флагов:
[addrow force icache cex.articles]
Перед добавлением можно проверить настройку прав доступа, через команду [table.add?] (add?), которая вернёт [true] в случае, если текущий пользователь обладает правами на добавление в указанную таблицу или подтаблицу.
После добавления можно узнать, завершилась ли операция успешно через метод [cancel?] (Причина отмены). Если операция завершилась успешно, метод вернёт [false], иначе будет содержать причину отмены операции, либо [-1] в случае тихой отмены ([cancel silent]).
Также после добавления можно получить доступ к добавленному объекту через команду [li] (Последний добавленный элемент),
Код: [editrow_full]
Псевдонимы: editrow2
В этом случае на время изменения объекта старые значения полей доступны через команду [backrow] (Доступ к предыдущим значениям объекта в момент его изменения) и используются все установленные обработчики.
Перед использованием команды [editrow] необходимо заполнить переменные, которые будут участвовать в процессе изменения. Переменные указываются аналогично методу Добавить.
Пример. Меняем статью.
['title'->'Новый заголовок']
[editrow $article]
Можно использовать флаг [icache] для отмены удаления связанного с таблицей кеша шаблонов
Пример: [editrow icache $article]
Перед изменением объекта можно проверить наличие доступа для проведения операции. Сделать это можно с помощью метода объекта [edit?], который вернёт [true] в случае положительной возможности. Например [$article.edit?].
После изменения можно узнать, завершилась ли операция успешно через метод [cancel?] (Причина отмены). Если операция завершилась успешно, метод вернёт [false], иначе будет содержать причину отмены операции, либо [-1] в случае тихой отмены ([cancel silent]).
Код: [editrow]
Псевдонимы: editrow3
Меняет поля объекта напрямую, без использования Доступ к предыдущим значениям объекта в момент его изменения.
Не использует обработчики полей и таблицы.
Полный аналог метода объекта [edit]
Код: [editrow_handler]
Меняет поля объекта напрямую, без использования Доступ к предыдущим значениям объекта в момент его изменения.
Использует обработчики полей и таблицы.
Полный аналог метода объекта [edit_handler]
Код: [delrow]
Перед удалением можно проверить права на проведение операции.
Сделать это можно с помощью метода объекта [del?], который вернёт [true] в случае наличия возможностей для текущего пользователя.
Пример: [if $article.del?] [delrow $article] [/if]
Команда является полным аналогом метода объекта [del].
Код: [cmd]
Результат: различный
Пример использования:
[cmd(cex.articles.count * cmd(1+2))/2]
Следует использовать в тех случаях, когда не подходит использование обычных скобочек для группировки операторов (см. пример ниже).
Например: [cmd(url4 "action" "get").shurl]
Альтернатива:
[(cex.articles.count * (1+2))/2]
Код: [if]
Результат: различный
Пример:
[if($boolean,'on true','on false')]
Результат команды будет зависеть от значения условия.
С результатом можно продолжать работу в цепочке, например:
[if($boolean,'on true','on false') .length]
Параметр "Действие при невыполнении условия" является необязательным.
Альтернатива:
[$boolean.if('on true','on false')]
Классическая альтернатива:
[if $boolean]
on true
[else]
on false
[/if]
Код: [next_cron]
Условие для использования: Часть вызывается по таймеру
Например, часть обнаружила, что её выполнение не требуется. Чтобы не занимать собой временную ячейку можно использовать данную команду. В этом случае после неё выполнится следующая в очереди часть.
Код: [signal]
Если указана группа, то сообщение будет отображаться до первого прочтения любого члена группы (в отличие от групповых писем).
Кроме сообщения можно указать URL-адрес, с которым связано событие.
Кроме этого можно создавать сообщения с привязкой к объектам. Для этого можно использовать метод объекта [signal].
Например, напишем обработчик для добавление комментария:
[if f_action=='add']
[li.signal('Новый комментарий',
group.comment_moderators)]
[/if]
Код: [flush]
Например:
[x=1]
[flush('x')]
Код: [remind_form]
Результат: Значение (текст, числа, дата)
Необходимо использовать в связке с командой [user.remind] (см.remind) и, обязательно, на той же самой странице.
Пример размещения:
[remind_form]
[if get.action=='remind']
[user.remind]
[/if]
<a href="?action=remind">Восстановить пароль</a>
Процесс восстановления:
- Пользователю приходит письмо с ссылкой на ту же страницу, откуда он заказывал восстановление.
- Перейдя по ссылке пользователю генерируется и выдаётся новый пароль./li>
Если указать "Отправить новый пароль на почту", то после восстановления пароль будет отправлен на почту пользователя.
Переменная стойкость определяет количество символов нового сгенерированного пароля.
Код: [form_protect]
Например:
<form action="[url]" method="post">
[form_protect]
<input type="hidden" name="action"
value="add">
</form>
Эту форму нельзя отправить дважды на сервер (не подтерев предварительно COOKIE из браузера пользователя).
Код: [deeper_cow]
Результат: Объект
Например, если наш URL выглядит так:
['domain.com/page1/article1/comment21']
То [deeper_cow] будет являться комментарий с URL 'comments21' (если он уже будет к тому времени разобран маршрутизатором).
После вызова части "Страницы", [deeper_cow] примет значение страницы 'page1'.
После вызова части "Обзор статьи", [deeper_cow] примет значение статьи 'article1'.
Код: [get_group]
Результат: Группа пользователей
Код: [any_group]
Результат: Группа пользователей
Команда используется в том случае, когда нас интересует одна из операций поиска пользователей без привязки к конкретной группе.
Например, [any_group.search_name('Vasya')]
Выдаст пользователя с именем 'Vasya' в какой бы группе он не находился.
Код: [timer]
Результат: Значение (текст, числа, дата)
Для этого, перед выполнением нужного кода необходимо указать [timer.start]
А после кода указать [timer.stop] (или [x=timer.stop], если мы хотим присвоить время выполнения переменной).
Результатом будет являться время, прошедшее между вызовом [timer.start] и [timer.stop].
Если вам нужно использовать несколько таймеров, указывайте их название.
Например:
[timer.start('timer1')]
[timer.start('timer2')]
некоторый код
[timer.stop('timer2')]
[timer.stop('timer1')]
Код: [send_messages_others]
Код: [host_action_type]
Результат: Значение (текст, числа, дата)
Код: [cancel]
В качестве аргумента указывается причина отмены, либо флаг silent (выставляющий в причину значение [-1])
Пример:
[if cow.title.length<3]
[cancel 'Слишком короткий заголовок']
[/if]
В дальнейшем причину отмены можно узнать с помощью команды [cancel?]
Код: [stand]
Пример: [stand alone]
Позволяет вывести содержимое текущей части (и последующих частей) отдельно от предыдущего содержимого.
Например, к странице сайта подключён некий модуль, одну из частей которого нужно вывести игнорируя шаблон сайта.
Для игнорирования предыдущего и последующего вывода пишем в части следующий код:
[stand alone]
Некий текст (например, RSS лента статей)
[exit]
Код: [hard_cache]
В отличие от автоматического кеширования системы, кеширует не отдельный элемент, а всю страницу целиком, привязывая её к URL. В дальнейшем эта страница будет загружена из кеша по хешу URL, в обход всей системы, прав доступа, маршрутизатора и т.д.
Данное кеширование не является автоматическим и отключается только при очистке кеша из настроек административного кабинета.
Полезно использовать на загруженных проектах для страниц, чьё изменение не планируется в течении длительного времени.
Код: [skip]
[skip dbsspace] - убирает двойные пробелы
[skip space] - убирает все пробелы (в этом случае пробел вставляется через команду [#], символы новых строк через [#10] и [#13]
[skip enter] - убирает вертикальные пробелы (код 10 и 13)
[skip empty] - убирает пустые строки
Код: [pup]
Результат: различный
Доступные методы:
[pup.cow] - текущий объект, определённый маршрутизатором вышестоящей части
[pup.table] - таблица определённого объекта
[pup.cex] - экземпляр модуля
[pup.module] - модуль
[pup.part] - ссылка на часть, с возможностью вызова её методов
[pup.pup] - переход на следующую вышестоящую часть. Можно вызывать нужное количество раз, например [pup.pup.pup] и т.д.
Код: [block]
Результат: различный
Пример:
[block.some_block(var1=value, varN=valueN)]
Более конкретный пример:
[* установим блок *]
[block name="b1" silent]
[return $x++$y]
[/block]
[* запустим блок *]
[block.b1(x=1, y=2)]
Более подробно про блоки читайте здесь
Код: [cache]
Важно, чтобы символы настройки располагались в самом начале кешируемого шаблона (или отдельной его секции).
Первый символ, инициализирующий настройку [^] (shift+6 в английской раскладке).
Следующий символ характеризует привязку кеша ([&], [*], [#], [%] и [_] описание см.выше). От привязки будет зависеть количество вариантов кеша для одного и того же кода. Например, кеш, привязанный к значению циклов будет генерироваться для каждого значения цикла отдельно.
Далее идёт опциональный флаг [~] (тильда), наличие которого отвязывает кеш от авторизации. Если знака нет, то для разных авторизованных пользователей (и для гостей сайта отдельно) будет создаваться разный кеш. Если знак есть - кеш будет один для всех. В этом случае, если шаблон содержит код, предназначенный только для администратора (например, некие формы редактирования материала, сообщения администратора или другие секретные данные), то после кеширования они станут доступны всем пользователям.
Далее можно установить флаг [@], отвечающий за автоудаления кеша. Если знак не стоит, автоудаление будет включено. В этом случае при генерации кеша записываются все объекты, таблицы и части, используемые в нём. При их изменении, удалении (и иногда при добавлении) кеш будет автоматически очищен. Если флаг установлен - очистка кеша будет производиться только вручную, через раздел "настройки" в административной панели.
Последний флаг - [!]. Его наличие означает, что кеш жёстко привязан к домену сайта. В случае, если модуль работает на нескольких сайтах, а данный флаг не установлен, для всех сайтов будет сгенерирован одинаковый кеш. Если флаг установлен - кеш будет различаться для каждого домена.
В самом конце настройки можно указать время жизни кеша. Если оно не указано - кеш вечный (за исключения случаев автоудаления кеша, в случае превышения заданной в настройках квоты размера).
Время указывается в обычных круглых скобках. Время указывается в минутах. Если перед временем стоит знак доллара, то время указывается в сутках.
Стоит отметить, что привязка кеша к Cookies пользователя будет работать только для тех cookies-переменных, которые задействованы в кешируемом шаблоне.
Примеры настройки кеширования
^& - кеш привязан ко всему, чему только можно, любое изменение (например, добавления GET переменной в URL) приведёт к генерации нового кеша
^* - кеш привязан только к экземпляру модуля. Прочих настроек нет.
^#@(720) - кеш привязан к модулю, окружающим переменным части и cookies пользователя. Автоудаление кеша выключено, его время жизни составит 720 минут.
^_ - кеш привязан только к значению циклов, в которых он находится
^%~!($30) - кеш привязан к модулю, переменным окружения, cookies-пользователя и значениям циклов. Кроме этого кеш отвязан от авторизации пользователя и строго привязан к домену. Максимальное время жизни кеша составит 30 суток.
Примеры встраивания настроек кеширования в шаблон
Содержимое части:
^&
[if $x==1]^#(10)
Some code
[/if]
[for 1..10]^_
some code
[/for]
Код: [use]
Подробнее можно почитать здесь в разделе "Наследование шаблонов с помощью блоков".
Первый аргумент команды определяет тип источника родительского шаблона:
[module] - часть текущего модуля
[up] - вышестоящая часть (часть-родитель)
[function/show/component/form] - компонент
[tpl] - текстовый шаблон
Второй аргумент определяет сам источник родительского шаблона.
Для [module] и [function] это будет имя части. [up] не нуждается в таком определении, а в случае с [tpl] вторым аргументом будет строка, содержащая шаблон.
Простой пример
Создадим две части. Родитель и наследник.
Родитель / parent:
some text
[block name="content"]
Контент родителя
[/block]
Наследник:
[use module 'parent']
[block name="content"]
Контент наследника
[/block]
Результатом будет:
some text
Контент наследника
Для того, чтобы добавить что-то вне блоков родительского шаблона, можно завернуть [use] внутрь блока. Например вот так:
Наследник:
top text
[block name="data"]
[use module 'parent']
[block name="content"]
Контент наследника
[/block]
[/block]
bottom text
Результатом будет:
top text
some text
Контент наследника
bottom text
Сложный пример множественного наследования шаблонов
Для этого примера мы будем использовать три части.
1ая часть - Прородитель / proto
Шапка
[block name="content"]
Контент страницы
[/block]
Разделитель
[block name="bottom"]
Контент подвала
[/block]
2ая часть - Родитель / parent
[use module 'proto']
Переопределим подвал
[block name="bottom"]
[parent_block_content]
Добавленный контент к подвалу
[block name="advert"]
Рекламный блок
[/block]
[/block]
3я часть - Текущая
[use module 'parent']
Переопределяем контент
[block name="content"]
[parent_block_content]
Дополненный контент
[/block]
Переопределяем рекламу
[block name="advert"]
Новая реклама
[/block]
Результатом будет следующий текст:
Шапка
Контент страницы
Дополненный контент
Разделитель
Контент подвала
Добавленный контент к подвалу
Новая реклама
Обратите внимание на оператор [parent_block_content], переносящий содержимое текущего блока из шаблона-родителя в дочерний шаблон. Как видно из примера он позволяет переносить контент сквозь всю иерархию частей (в нашем случае из 1ой части в 3ю и из 2ой в 3ю).
Код: [parent_part_code]
Результат: Значение (текст, числа, дата)
Читать далее про "Значение (текст, числа, дата)"