Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Вызов макроса из кастомного макроса.

Автор niakrissРаздел Макросы UMI.CMS

Ответов: 4
Просмотров: 3934
Последний ответ 21 Октября 2013, 10:47:10
от niakriss
XSLT: вызов существующего раздела из вновь созданной пустой старницы

Автор samРаздел Шаблоны XSLT

Ответов: 9
Просмотров: 3270
Последний ответ 16 Ноября 2014, 23:19:20
от admin
Вызов рубрики и alt-name в новость, разделение на прошедшие и действующие

Автор SumrakrndРаздел Шаблоны XSLT

Ответов: 6
Просмотров: 2821
Последний ответ 01 Июня 2017, 13:06:43
от Sumrakrnd
Вызов шаблона работает только под админом

Автор idu.kuruРаздел Шаблоны XSLT

Ответов: 2
Просмотров: 2783
Последний ответ 22 Марта 2015, 18:34:19
от admin
Вызов макроса в макросе. Порядок интерпретации.

Автор psw2020Раздел Макросы UMI.CMS

Ответов: 7
Просмотров: 3287
Последний ответ 28 Декабря 2015, 16:53:22
от psw2020

0 Пользователей и 1 Гость просматривают эту тему.

*

31rus

  • *
  • 46
  • +2/-0
    • Просмотр профиля
Вызов result с конкретный ID
« : 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>

*

aghigay

  • *****
  • 611
  • +28/-3
  • Просто пытаюсь помочь. Иногда пинком
    • Просмотр профиля
    • umicms.me
Re: Вызов result с конкретный ID
« Ответ #1 : 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/
Мой блог http://umicms.me

*

31rus

  • *
  • 46
  • +2/-0
    • Просмотр профиля
Re: Вызов result с конкретный ID
« Ответ #2 : 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'">
           
        </xsl:when>
        <xsl:when test="$type_name = 'Страница с описанием'">
            <xsl:call-template name="content-inner">
                <xsl:with-param name="upage" select="$upage"/>
            </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>
            <xsl:call-template name="content">
                <xsl:with-param name="upage" select="$upage"/>
            </xsl:call-template>
        </xsl:otherwise>
    </xsl:choose>

Но такой вариант не удобен и лишает гибкости, поэтому если можно было бы, передать системе просто вызов 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>

*

aghigay

  • *****
  • 611
  • +28/-3
  • Просто пытаюсь помочь. Иногда пинком
    • Просмотр профиля
    • umicms.me
Re: Вызов result с конкретный ID
« Ответ #3 : 12 Ноября 2016, 16:23:10 »
Так как id типа обычно не меняется, то вы можете делать проверку через атрибут типа: @type-id вместо @id
<xsl:template match="result[page/@type-id=12]">
Мой блог http://umicms.me