UMIhelp

Разработка сайта на UMI.CMS => Шаблоны XSLT => Тема начата: arbuzzz от 05 Марта 2017, 15:16:07

Название: Почему не отрабатывает шаблон?
Отправлено: arbuzzz от 05 Марта 2017, 15:16:07
Добрый день. Пытаюсь вывести самодельный слайдер.

http://domainname.ru/udata://content/bannerSlider/791

выводит следующее

<udata xmlns:xlink="http://www.w3.org/TR/xlink" module="content" method="bannerSlider" generation-time="0.004760">
<items>
<item id="792" link="/dostavka_i_oplata/" image="/images/cms/banners/dostavka.jpg"/>
</items>
</udata>

В шаблоне пишу:
<xsl:apply-templates select="document(concat('udata://content/bannerSlider/',791,'/'))" mode="bannerSlider" />

В подключаемом файле slider.xls прописано:
    <xsl:template match="result[@module = 'content'][@method = 'bannerSlider']" mode="bannerSlider">
        <div class="carousel">
            <xsl:apply-templates select="//items/item" mode="bannerSlide"/>
            <a class="left carousel-control" id="big_prev"></a>
            <a class="right carousel-control" id="big_next"></a>
        </div>
    </xsl:template>
   
    <xsl:template match="item" mode="bannerSlide">
        <div class="carousel-inner">
            <div class="item from_tan">
                <a href="{@link}" umi:field-name="name" umi:field-type="string" umi:empty="&empty-name;" umi:url-attribute="href">
                    <img src="{@image}" height="453" width="940" href="#" />
                </a>
            </div>
        </div>
    </xsl:template>

Да и даже если после
<xsl:apply-templates select="document(concat('udata://content/bannerSlider/',791,'/'))" mode="bannerSlider" />

сразу пишу
<xsl:template match="result[@module = 'content'][@method = 'bannerSlider']" mode="bannerSlider">11111111</xsl:template>
то все равно ничего не выводится. Что я делаю не так, поясните.
Название: Re: Почему не отрабатывает шаблон?
Отправлено: aghigay от 05 Марта 2017, 15:33:37
http://domainname.ru/udata://content/bannerSlider/791 выводит udata а не result

А вы у себя проверяете
 <xsl:template match="result[@module = 'content'][@method = 'bannerSlider']" mode="bannerSlider">

Надо как минимум проверять
 <xsl:template match="udata[@module = 'content'][@method = 'bannerSlider']" mode="bannerSlider">

А еще лучше проверять просто
 <xsl:template match="udata" mode="bannerSlider">

Ибо если вы переназовёте свою функцию или отправите её в другой модуль - ваш функционал отключится. А в случае проверки на udata без доп свойств - нет.
Название: Re: Почему не отрабатывает шаблон?
Отправлено: arbuzzz от 05 Марта 2017, 15:50:59
http://domainname.ru/udata://content/bannerSlider/791 выводит udata а не result

А вы у себя проверяете
 <xsl:template match="result[@module = 'content'][@method = 'bannerSlider']" mode="bannerSlider">

Надо как минимум проверять
 <xsl:template match="udata[@module = 'content'][@method = 'bannerSlider']" mode="bannerSlider">

А еще лучше проверять просто
 <xsl:template match="udata" mode="bannerSlider">

Ибо если вы переназовёте свою функцию или отправите её в другой модуль - ваш функционал отключится. А в случае проверки на udata без доп свойств - нет.

Спасибо Вам большое, все получилось. Все такие xslt выше моего понимания. Это какая-то ерунда, а не язык.
Название: Re: Почему не отрабатывает шаблон?
Отправлено: aghigay от 05 Марта 2017, 15:55:44
Ибо это не язык - это правила. Вы пишите правила как обрабатывать данные. Ничего другого XSLT не делает. И тут нет никакой магии.

Нужно немного отойти от процедурных пониманий языка программирования и тогда все встанет на свои места. Безусловно, это другой, более высокий уровень квалификации и не каждый его осваивает.
Название: Re: Почему не отрабатывает шаблон?
Отправлено: arbuzzz от 05 Марта 2017, 16:13:24
Ибо это не язык - это правила. Вы пишите правила как обрабатывать данные. Ничего другого XSLT не делает. И тут нет никакой магии.

Нужно немного отойти от процедурных пониманий языка программирования и тогда все встанет на свои места. Безусловно, это другой, более высокий уровень квалификации и не каждый его осваивает.
Мне кажется это не вопрос уровня квалификации. Это вообще какая-то отдельная кухня. Что-то вроде css и jquery. Теплое и мягкое.
Т.е. для меня нет проблемы написать, какой-то свой класс на php, к примеру. Сейчас я, например, хочу изучить java и пока смотрю курс лекций. Проблем с пониманием услышанного у меня нет.

Но вот этот xslt у меня вызывает какое-то раздражение. Какой-то черный ящик, честное слово. Никогда не знаешь что где кто подключил, какие правила перекроют то, что ты пытаешься писать, полное непонимание, как все это отлаживать и отслеживать. У меня сейчас пришел сайт. Тот, кто его верстал налепил какое-то нагромождение  конструкций <xsl:if /> которыми разрулил подгрузку разным шаблонов. разбираться в этой вермишели - сущее мучение.