Вот есть такой шаблон в файле 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
Странно, вроде всё ровно и должно работать.
Я бы начал вот что делать:
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 - корректный способ.
Начните с малого:
<?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;
Вероятнее всего это решит вопрос.
<?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>
да вот так оно выводит....
А как делать много уровневый список не подскажите и с помощью чего....
Уважаемый 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) > 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>
Обратите внимание на места, где я обращаюсь к шаблонам, отвечающим за вызов внутреннего содержимого.
А еще обратите внимание на пустой шаблон, который используются в случае, если не срабатывает условие непустого шаблона.