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

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

*

psfdek

  • *
  • 10
  • +0/-0
    • Просмотр профиля
Вывод карты сайта xsl шаблоном
« : 11 Марта 2016, 01:31:44 »
Вот есть такой шаблон в файле sitemap.xml
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:include href="types/content.main-page.xsl" />
<xsl:include href="types/content.contacts.xsl" />
<xsl:include href="types/content.job.xsl" />
<xsl:template match="result[@request-uri='/sitemap/']">
      <div id="main-sitemap">
          <xsl:apply-templates select="document('udata://content/menu')//item" mode="sitemap"/>
      </div>
</xsl:template>
<xsl:template match="//item" mode="sitemap">
<div class="widget">
<a href="{@link}"><xsl:value-of select="node()" /></a>
</div>
</xsl:template>
</xsl:stylesheet>

Когда запрашиваю  <xsl:apply-templates select="document('udata://content/menu')//item" mode="sitemap"/>
То оно отображает итемы, а если <xsl:apply-templates select="document('udata://content/sitemap')//item" mode="sitemap"/> то ничего...
Почему так?


Приложен архив с ответами страниц

/udata://content/sitemap   - sitemap.xml
/udata://content/menu  - menu.xml

*

Rodogor

  • ***
  • 189
  • +24/-0
    • Просмотр профиля
Re: Вывод карты сайта xsl шаблоном
« Ответ #1 : 11 Марта 2016, 10:35:20 »
Странно, вроде всё ровно и должно работать.

Я бы начал вот что делать:

0. Убедиться, что нет другого шаблона mode="sitemap" для udata://content/sitemap для item "с более высоким приоритетом", который возможно срабатывает. заменить mode="sitemap" на mode="sitemap222" в вызове шаблона и в описание шаблона
1. <xsl:copy-of select="document('udata://content/sitemap')/udata"/> - убедиться, что там точно что-то есть.
2. Начал бы разбираться последовательно:

!!!<xsl:apply-templates select="document('udata://content/sitemap')/udata" mode="sitemap222"/>!!!

<xsl:template match="udata[@method='sitemap']" mode="sitemap222">
...udata...
<xsl:apply-templates select="items" mode="sitemap222"/>
</xsl:template>

<xsl:template match="udata[@method='sitemap']//items" mode="sitemap222">
...items...
<xsl:apply-templates select="item" mode="sitemap222"/>
</xsl:template>

<xsl:template match="udata[@method='sitemap']//item" mode="sitemap222">
...item...
<xsl:apply-templates select="items" mode="sitemap222"/>
</xsl:template>
И затем бы начал анализировать то, что выводится



P.S.
Лично я не пользуюсь такой формой записи
<xsl:template match="//item" mode="sitemap">

и записал бы это вот так
<xsl:template match="item" mode="sitemap">

Не исключено, что //item - корректный способ.

*

psfdek

  • *
  • 10
  • +0/-0
    • Просмотр профиля
Re: Вывод карты сайта xsl шаблоном
« Ответ #2 : 11 Марта 2016, 19:36:17 »
Нет почему-то оно не выводит ничего вообще когда я запрашиваю sitemap, а когда menu то выводит.
Если же напрямую обращаюсь то оно норм выдает страницы.

*

aghigay

  • *****
  • 611
  • +28/-3
  • Просто пытаюсь помочь. Иногда пинком
    • Просмотр профиля
    • umicms.me
Re: Вывод карты сайта xsl шаблоном
« Ответ #3 : 11 Марта 2016, 21:01:44 »
Напрямую - это как?
Мой блог http://umicms.me

*

psfdek

  • *
  • 10
  • +0/-0
    • Просмотр профиля
Re: Вывод карты сайта xsl шаблоном
« Ответ #4 : 12 Марта 2016, 00:14:55 »

*

aghigay

  • *****
  • 611
  • +28/-3
  • Просто пытаюсь помочь. Иногда пинком
    • Просмотр профиля
    • umicms.me
Re: Вывод карты сайта xsl шаблоном
« Ответ #5 : 12 Марта 2016, 00:59:38 »
Начните с малого:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:include href="types/content.main-page.xsl" />
    <xsl:include href="types/content.contacts.xsl" />
    <xsl:include href="types/content.job.xsl" />
    <xsl:template match="result[@request-uri='/sitemap/']">
        <div id="main-sitemap">
            <xsl:apply-templates select="document('udata://content/menu')//item" mode="sitemap"/>
            <div style="display:none;"><xsl:copy-of select="document('udata://content/menu')" /></div>
            <div style="display:none;"><xsl:copy-of select="document('udata://content/sitemap')" /></div>
        </div>
    </xsl:template>
    <xsl:template match="//item" mode="sitemap">
        <div class="widget">
            <a href="{@link}">
                <xsl:value-of select="node()" />
            </a>
        </div>
    </xsl:template>
</xsl:stylesheet>

И посмотрите что выводится в двух блоках за display:none;

Вероятнее всего это решит вопрос.
Мой блог http://umicms.me

*

psfdek

  • *
  • 10
  • +0/-0
    • Просмотр профиля
Re: Вывод карты сайта xsl шаблоном
« Ответ #6 : 12 Марта 2016, 18:14:56 »
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:include href="types/content.main-page.xsl" />
    <xsl:include href="types/content.contacts.xsl" />
    <xsl:include href="types/content.job.xsl" />
    <xsl:template match="result[@request-uri='/sitemap/']">
        <div id="main-sitemap">
            <xsl:apply-templates select="document('udata://content/sitemap')//item" mode="sitemap"/>
            <div style="display:none;"><xsl:copy-of select="document('udata://content/menu')" /></div>
            <div style="display:none;"><xsl:copy-of select="document('udata://content/sitemap')" /></div>
        </div>
    </xsl:template>
    <xsl:template match="//item" mode="sitemap">
        <div class="widget">
            <a href="{@link}">
                <xsl:value-of select="@name" />
            </a>
        </div>
    </xsl:template>
</xsl:stylesheet>

да вот так оно выводит....
А как делать много уровневый список не подскажите и с помощью чего....

*

aghigay

  • *****
  • 611
  • +28/-3
  • Просто пытаюсь помочь. Иногда пинком
    • Просмотр профиля
    • umicms.me
Re: Вывод карты сайта xsl шаблоном
« Ответ #7 : 12 Марта 2016, 18:36:30 »
Тогда проверяйте по рекомендации Rodogor - у вас скорее всего кто-то перехватывает шаблон и не дает вывести результат.

Многоуровневый список выводится так же, как и одноуровневый, только в многоуровневом на каждом уровне вы вызываете шаблон для подуровней, а в одноуровневом - нет.
Мой блог http://umicms.me

*

psfdek

  • *
  • 10
  • +0/-0
    • Просмотр профиля
Re: Вывод карты сайта xsl шаблоном
« Ответ #8 : 15 Марта 2016, 00:52:47 »
Не могу понять как выводить уровни в этом xsl, капец какой-то...
Кто это придумал блин :(
Как так вообще вышло что платная CMS не имеет готового шаблона вывода HTML карты..

http://24telecom.siterestart.ru/udata://content/sitemap
Я хочу эту карту вывести многоуровневым списком что бы было понятно где родительская, а где дочерняя страницы, но не выходит..


Как определять уровень вложенности item не понятно и не понятно где и как про это искать в примере с меню по другому...
« Последнее редактирование: 15 Марта 2016, 01:20:09 от psfdek »

*

Rodogor

  • ***
  • 189
  • +24/-0
    • Просмотр профиля
Re: Вывод карты сайта xsl шаблоном
« Ответ #9 : 15 Марта 2016, 09:36:42 »
Не могу понять как выводить уровни в этом xsl, капец какой-то...
Кто это придумал блин :(
Как так вообще вышло что платная CMS не имеет готового шаблона вывода HTML карты..

http://24telecom.siterestart.ru/udata://content/sitemap
Я хочу эту карту вывести многоуровневым списком что бы было понятно где родительская, а где дочерняя страницы, но не выходит..


Как определять уровень вложенности item не понятно и не понятно где и как про это искать в примере с меню по другому...

Ну все кто сталкивались с UMI, знают, что почти всё приходиться делать руками.
Это как продукция автоваза - спустя какое-то время становишься автомехаником, а c UMI - как минимум продвинуто-задвинутым пользователем, а то и программистом

*

aghigay

  • *****
  • 611
  • +28/-3
  • Просто пытаюсь помочь. Иногда пинком
    • Просмотр профиля
    • umicms.me
Re: Вывод карты сайта xsl шаблоном
« Ответ #10 : 15 Марта 2016, 10:31:46 »
Уважаемый psfdek!

Сдаётся мне, что вы не знаете элементарных основ xslt. И наличие стандартного шаблона тут ни при чем. Ладно, вводный курс. (полный курс можете пройти отдельно - в ближайшее время будет новый набор)

Итак, макрос sitemap (http://dev.docs.umi-cms.ru/spravochnik_makrosov_umicms/struktura_i_kontent/content_sitemap/#xslt-templating) возвращает xml документ в таком виде

<udata module="content" method="sitemap" generation-time="0.018748">
  <items>
    <item id="1" link="/" name="Добро пожаловать" xlink:href="upage://1"/>
    <item id="2" link="/talks/" name="Форум" xlink:href="upage://2"/>
    <item id="12" link="/vse_novosti/" name="Все новости" xlink:href="upage://12">
      <items>
        <item id="13" link="/vse_novosti/politicheskie_novosti/" name="Политические новости" xlink:href="upage://13"/>
        <item id="19" link="/vse_novosti/novosti_ekonomiki/" name="Новости экономики" xlink:href="upage://19"/>
      </items>
    </item>
    <item id="26" link="/contacts/" name="Обратная связь" xlink:href="upage://26"/>
    <item id="27" link="/umicms/" name="FAQ" xlink:href="upage://27"/>
    <item id="40" link="/downloads/" name="Скачать" xlink:href="upage://40">
      <items>
        <item id="41" link="/downloads/php_manual/" name="PHP Manual" xlink:href="upage://41"/>
      </items>
    </item>
    <item id="42" link="/obychnaya_stranica/" name="Обычная страница" xlink:href="upage://42"/>
    <item id="43" link="/market/" name="Каталог товаров" xlink:href="upage://43"/>
  </items>
</udata>

Здесь представлена карта сайта в виде вложенного в item тег items тега. А внутри items лежат другие item - дочерние к верхнему узлу. Ну и верхний items тоже стоит не забыть.

Задача разработчика xslt-шаблона - расписать обработку (и вывод, что фактически является синонимом) абсолютно всех возможные варианты тегов.

Как видно из документа, тегов тут всего 3: udata, item, items.

Как пишу обычно я:
Вызываю карту сайта я обычно так:

<xsl:apply-templates select="document('udata://content/sitemap/notemplate/2')/udata" mode="sitema_sitemap_sitemap" />

Название мода можно выбрать любым - это не важно. Главное чтобы было везде одинаковым.

Обработка udata выглядит так
    <xsl:template match="udata" mode="sitema_sitemap_sitemap">
        <xsl:apply-templates select="items" mode="sitema_sitemap_sitemap" />
   </xsl:template>

Обработка items выглядит так
    <xsl:template match="items" mode="sitema_sitemap_sitemap" />
    <xsl:template match="items[count(item) &gt; 0]" mode="sitema_sitemap_sitemap">
        <ul>
            <xsl:apply-templates select="item" mode="sitema_sitemap_sitemap" />
        </ul>
  </xsl:template>

Обработка item выглядит так
    <xsl:template match="item" mode="sitema_sitemap_sitemap">
        <li>
            <xsl:value-of select="@name" />
            <!-- ВАЖНО !!! -->
            <xsl:apply-templates select="items" mode="sitema_sitemap_sitemap" />
            <!-- ИМЕННО ТАК ДЕЛАЕТСЯ ВЛОЖЕННОСТЬ СПИСКОВ - ВЫ !!! ОБРАБАТЫВАЕТЕ !!! ИХ -->
        </li>
  </xsl:template>

Обратите внимание на места, где я обращаюсь к шаблонам, отвечающим за вызов внутреннего содержимого.
А еще обратите внимание на пустой шаблон, который используются в случае, если не срабатывает условие непустого шаблона.
Мой блог http://umicms.me

*

psfdek

  • *
  • 10
  • +0/-0
    • Просмотр профиля
Re: Вывод карты сайта xsl шаблоном
« Ответ #11 : 15 Марта 2016, 14:16:32 »
Спасибо за Ваш пример.