grisha2217
Проверенные
- Сообщения
- 913
- Решения
- 6
- Реакции
- 1,389
- Баллы
- 5,715
Недавно сам лично столкнулся с вопросом, как заинклюдить шаблон, название которого хранится в переменной
Вопрос на оф форуме
Если вы разбираетесь в синтаксисе шаблонов в движке, возможно, вы попробовали задать название переменной через xen:set var
Такой код не будет работать, так как сначала инклюдятся шаблоны в шаблоне, а потом уже задаются переменные, то есть конструкция xen:include template выполнится раньше, чем xen:set var
Попробую объяснить, в каких случаях вы захотите использовать переменную в названии шаблонов: например, вы хотите показать определенный блок (шаблон) в определенном разделе:
Раздел id 1 -> Блок 1
Раздел id 3 -> Блок 3
Раздел id 19 -> Блок 19
Приступим к решению. Буду использовать код с рабочего проекта.
Во-первых, надо найти ViewPublic, отвечающий за отображение страницы с определенный шаблоном. Например, для шаблона forum_view это XenForo_ViewPublic_Forum_View.
В моём коде, в зависимости от категории я хочу показать определенный шаблон:
Простыми словами:
1. Первое, что мы делаем, проверяем наличие нужной переменной (это не обязательно, если уверены, что переменная всегда существует)
2. Создаем объект шаблона и рендерим его
3. В параметры вставляем наш готовый код с шаблона
Замечание:
В созданном шаблоне нельзя использовать переменные, которые были определены в родительском шаблоне через xen:set var (зато можно использовать параметры, которые вы передали в функцию createTemplateObject.
Далее в шаблоне уже можно использовать
Вопрос на оф форуме
У Вас недостаточно прав для просмотра ссылок.
Вход или Регистрация
Если вы разбираетесь в синтаксисе шаблонов в движке, возможно, вы попробовали задать название переменной через xen:set var
HTML:
<xen:set var="$templateVar">mytemplate</xen>
<xen:include template="$templateVar" />
Такой код не будет работать, так как сначала инклюдятся шаблоны в шаблоне, а потом уже задаются переменные, то есть конструкция xen:include template выполнится раньше, чем xen:set var
Попробую объяснить, в каких случаях вы захотите использовать переменную в названии шаблонов: например, вы хотите показать определенный блок (шаблон) в определенном разделе:
Раздел id 1 -> Блок 1
Раздел id 3 -> Блок 3
Раздел id 19 -> Блок 19
Приступим к решению. Буду использовать код с рабочего проекта.
Во-первых, надо найти ViewPublic, отвечающий за отображение страницы с определенный шаблоном. Например, для шаблона forum_view это XenForo_ViewPublic_Forum_View.
В моём коде, в зависимости от категории я хочу показать определенный шаблон:
PHP:
class Market_ViewPublic_Index extends XenForo_ViewPublic_Base
{
public function renderHtml()
{
if ($this->_params['filter']['category_id']) // проверяем, есть ли вообще нужная переменная
{
$templateName = 'market_search_bar_platform_' . $this->_params['filter']['category_id'];
$categorySearchBar = $this->createTemplateObject($templateName, $this->_params)->render(); // создаем и рендерим нужный шаблон
$this->_params['categorySearchBar'] = $categorySearchBar; // добавляем в параметры (ака ViewParams в любом контроллере)
}
}
}
Простыми словами:
1. Первое, что мы делаем, проверяем наличие нужной переменной (это не обязательно, если уверены, что переменная всегда существует)
2. Создаем объект шаблона и рендерим его
3. В параметры вставляем наш готовый код с шаблона
Замечание:
В созданном шаблоне нельзя использовать переменные, которые были определены в родительском шаблоне через xen:set var (зато можно использовать параметры, которые вы передали в функцию createTemplateObject.
Далее в шаблоне уже можно использовать
{xen:raw $categorySearchBar}
Последнее редактирование: