UMIhelp

Разработка дополнительного функционала => Custom макросы => Тема начата: atach от 24 Апреля 2017, 22:23:11

Название: Принудительное назначение шаблона на обработку кастомного метода
Отправлено: atach от 24 Апреля 2017, 22:23:11
Подскажите такой момент. Вот есть у меня катомный метод который обрабатывает и выводит данные. Он выводит их по шаблону, который установлен по УМОЛЧАНИЮ в системе. Но в системе имеются и другие шаблоны. Как заставить отрисовать страницу по указанному мною ID шаблона.

В поддержки пока подсказать не могут, дали ссылку на файл, но что то я не могу понять:
Цитировать
Возможно, Вам подойдет метод setMethodTemplateId()
Пример использования Вы можете найти в файле /classes/components/def_module.php на 195 строке.

у меня в итоге после подготовки данных в конце метода идет вызов и отрисовка страницы вот так:
return def_module::parseTemplate($blockTemplate, $result, $revId);

Как правильно указать принудительно нужный мне ID шаблона я не понимаю.
Название: Re: Принудительное назначение шаблона на обработку кастомного метода
Отправлено: Vladimir от 25 Апреля 2017, 13:17:53
Тот метод, похоже, предназначен для принудительной смены шаблона страницы в целом. Поэтому логично его вызывать в самом начале вашего кастома.

Мне только не понятно, зачем вы упомянули def_module::parseTemplate, он же к странице не имеет отношения, он конкретные блоки на странице отрисовывает. Может, я не правильно понял задачу?

За вопрос спасибо, интересная возможность нашлась!
Название: Re: Принудительное назначение шаблона на обработку кастомного метода
Отправлено: atach от 25 Апреля 2017, 13:34:40
Так задача и стоит что бы принудительно сменить для всей страницы шаблон дизайна указав это в макросе.
Название: Re: Принудительное назначение шаблона на обработку кастомного метода
Отправлено: Vladimir от 25 Апреля 2017, 14:17:01
Я бегло пробежался по системе. Метод это нигде не используется. Есть одна зацепка. В файле /classes/system/subsystems/models/hierarchy/templatesCollection.php:

/**
* Получить Id шаблона, соответствующего иерархическому типу (модуль/метод)
* @param String $module модуль
* @param String $method метод
* @return Integer Id шаблона, привязанного к иерархическому типу
* @return Boolean false если шаблона не существует
*/
public function getHierarchyTypeTemplate($module, $method) {
if (class_exists($module) && method_exists($module, "setupTemplate")) {
$id = call_user_func(array($module, "setupTemplate"), $method);
} else {
$config = mainConfiguration::getInstance();
$id = $config->get("templates", "{$module}.{$method}");
}

return $this->isExists($id) ? $id : false;
}

Насколько я помню, в идеологии ЮМИ сочетание модуль\метод - это базовые иерархические методы, например, news/lastlist. Т.о., вам нужно узнать, к какому базовому иерархическому методу относится ваша страница (кажется, в настройках модуля Типы данных есть список всех зарегистрированных методов) и его передавать как имя метода. ИД шаблона вы знаете как посмотреть. Для модуля content, скорее всего, это будет пустая строка или имя модуля. Если это вам не поможет, ничего другого в голову не приходит.
Название: Re: Принудительное назначение шаблона на обработку кастомного метода
Отправлено: e.ioffe от 25 Апреля 2017, 23:18:44
Если используете xslt-шаблонизатор, то можете вызвать макрос вида udata://модуль/метод/?transform=путь к шаблону.xsl&template_id=id шаблона

В принципе, можете к любой странице добавить ?template_id=id шаблона, и получить ее отображение в другом шаблоне.
Название: Re: Принудительное назначение шаблона на обработку кастомного метода
Отправлено: psw2020 от 08 Июня 2017, 11:49:17
Если используете xslt-шаблонизатор, то можете вызвать макрос вида udata://модуль/метод/?transform=путь к шаблону.xsl&template_id=id шаблона

В принципе, можете к любой странице добавить ?template_id=id шаблона, и получить ее отображение в другом шаблоне.

также если используется TPL шаблонизатор в новом формате хранения шаблонов вызов будет такой /udata/модуль/метод/?transform=папка_с_шаблоном&template_id=id_любого_шаблона_из_этой_папки.
Пример: /udata/content/getReviewList/?transform=/templates/RR&template_id=68