Разработка сайта на UMI.CMS => Шаблоны XSLT => Тема начата: 31rus от 02 Ноября 2016, 06:38:35
Название: Вызов result с конкретный ID
Отправлено: 31rus от 02 Ноября 2016, 06:38:35
Есть ли возможность вызвать шаблон <xsl:apply-templates select="result" /> для страницы с определенным ID
Мне часто требуется делать лендинги, сейчас я использую несколько вариантов выборок. Меню, Usel и дальше choose и далее по типу данных или по его имени я вывожу страницы по нужным шаблонам.
Но меня не покидает идея, а реально ли на страницы layouts/default перебором получить все ID страниц и просто применить для каждой из них вывод result, что бы система сама дальше определяла какой передней тип данных и вызывала шаблоны в которых уже были бы уточнения.
Для Заголовков в Демодизи есть такой шаблон: <xsl:template match="result[@pageId]" mode="header"> <h2 umi:element-id="{@pageId}" umi:field-name="h1" umi:empty="&empty-page-name;"> <xsl:value-of select="@header" /> </h2> </xsl:template> Его назначение мне не совсем понятно, так как есть: <xsl:template match="result" mode="header"> <h2 umi:element-id="{@pageId}" umi:field-name="h1" umi:empty="&empty-page-name;"> <xsl:value-of select="@header" /> </h2> </xsl:template>
Название: Re: Вызов result с конкретный ID
Отправлено: aghigay от 02 Ноября 2016, 12:28:28
<xsl:apply-templates select="result" /> - это вызов шаблона result <xsl:apply-templates select="result[page/@id=12]" /> - это вызов шаблона result для страницы с ID= 12 <xsl:template match="result"> - это ОБРАБОТКА тега result (шаблон для тега result) <xsl:template match="result[page/@id=12]"> - это ОБРАБОТКА тега result для страницы с ID= 12 (шаблон для тега result для страницы с ID= 12)
Подробнее об этом по запросу XPATH. Пример статьи выдачи https://habrahabr.ru/post/114772/
Название: Re: Вызов result с конкретный ID
Отправлено: 31rus от 12 Ноября 2016, 08:56:35
Вызовы и уточнения шаблонов я умею делать, вопрос как обработать уточняющий шаблон когда id страницы заранее не известен.
Еще раз попробую сформулировать задачу, есть лендинг страница. Все блоки в ней представлены как страницы сайта с разными типами данных. Сейчас приходиться получать все страницы первого уровня и на базе меню описывать логику обработки.
Например в секции Item в меню делаем разбор по типам данных <xsl:choose> <xsl:when test="$type_name = 'Промо видео'"> <xsl:apply-templates select="document(concat('udata://photoalbum/album/(', $upage/@id,')'))" mode="bg-video"/> </xsl:when> <xsl:when test="$upage/basetype/@module = 'photoalbum'"> <xsl:apply-templates select="document(concat('udata://photoalbum/album/(', $upage/@id,')'))" mode="content"/> </xsl:when> <xsl:when test="$type_name = 'Отзывы'"> <xsl:apply-templates select="document(concat('udata://news/lastlist/(', $upage/@id,')/notemplate/10/0'))/udata" mode="testimonials"/> </xsl:when> <xsl:when test="$upage/basetype/@module = 'webforms'">
Но такой вариант не удобен и лишает гибкости, поэтому если можно было бы, передать системе просто вызов result с указанием Id нужной страницы, а далее система сама решала бы, какой перед ней тип данных и вызывала бы уже стандартные шаблоны для него.
То тогда в layots\default.xsl мы бы просто написали запись типа <xsl:for-each select="document(concat('usel://menu/', 1))/udata/page"> <xsl:apply-templates select="result[page/@id= id текущей страницы]" /> </xsl:for-each>
Название: Re: Вызов result с конкретный ID
Отправлено: aghigay от 12 Ноября 2016, 16:23:10
Так как id типа обычно не меняется, то вы можете делать проверку через атрибут типа: @type-id вместо @id