<xsl:apply-templates select="document('udata://news/listlents/(20)/notemplate/10')" mode="news.lents">
<xsl:param name="doc-lents" select="document('udata://news/listlents/(20)')"></xsl:param>
</xsl:apply-templates>
Но выводит все вместе...
Ну если чисто на XSLT, то получается на нужно применить lastlents к корню, потом к каждому элементу внутри и так до тех пор, пока количество элементов не станет равно нулю, т.е. будет означать что больше нет вложенных категорий.
На xslt это решается, но как-то будет выглядеть не особо красиво.
Проще использовать USEL.
Мы знаем, что нам нужно вернуть объекты типа "лента новостей". Знаем каталог, из которого нам нужно вернуть.
Пишем usel, указываем предполагаемую глубину deph.... тут думаю можно без комментариев.:
<?xml version="1.0" encoding="utf-8"?>
<selection>
<target result="pages">
<type module="news" method="rubric" />
<category depth="10">{1}</category>
</target>
</selection>
Вызываем его - localhost/usel/lentslist/37
Параметром идёт ID корня от которого начинаем поиск
Собственно вот мы и получили список лент.
Есть ещё варианты, если нужно воз можно написать свой макрос, если нужно возвращать именно в виде:
1. лента родитель
1.1 лента наследник
1.1.1. лента наследник
P.S. Я на тему подписался, если будут вопросы - задавай, подскажу/расскажу, вроде я уже шишек себе нормально набил.. Пора помочь фонду пострадавших от UMI
Вот полный листинг шаблона:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:spry="http://ns.adobe.com/spry">
<xsl:template match="result[@method = 'tree']">
<form enctype="multipart/form-data" method="POST">
<span>Выберите zip архив</span>
<input type="file" name="filename"/>
<input type="submit" value="Отправить"/>
</form>
<SELECT name="state" size="1">
<OPTION value="1">
<xsl:apply-templates select="document('udata://news/listlents/(20)/notemplate/10')" mode="news.lents">
<xsl:param name="doc-lents" select="document('udata://news/listlents/(20)')"></xsl:param>
</xsl:apply-templates>
</OPTION>
</SELECT>
</xsl:template>
</xsl:stylesheet>
Вот как получить нормальный список не понятно =(
Не могу понять - вообще ничего не получается сделать, т.е. такие операции на xslt не получаются ? Или что-то ещё ?...
Если я правильно понял, то нужно:
1. Создать в папке /usels/ файл lentslist.xml с содержимым
<?xml version="1.0" encoding="utf-8"?>
<selection>
<target result="pages">
<type module="news" method="rubric" />
<category depth="10">{1}</category>
</target>
</selection>
2. Далее в ваш код нужно добавить вызов этого usel
<SELECT name="state" size="1">
<xsl:apply-templates select="document('usel://lentslist/20')/udata/page" mode="news-lents-usel"/>
</SELECT>
3. Описать шаблон для обработки USEL:
<xsl:template match="page" mode="news-lents-usel>
<option value="{@id}"><xsl:value-of select="./name"/></option>
</xsl:template>
Если мы посмотрим USEL ещё раз, то увидим, что usel возвращает alt-name, оно как бы и является именем в транслите.
<page id="107" parentId="4" link="/catalogue/audi/" is-active="1" object-id="712" type-id="168" update-time="1345953349" alt-name="audi" xlink:href="upage://107"><basetype id="48" module="catalog" method="category">Разделы каталога</basetype><name>Audi</name></page>
Для того, что бы вывести его, нужно использовать следующий код:
<xsl:value-of select="@alt-name"/>
Рекоммендую Вам посмотреть имеющиеся уроки от umi, темы на это форуме и прочую инфу, т.к. это является своего рода "hello, world!"
Подскажите.
Как выводить ленту новостей автоматически?
В шаблоне если вписать вручную код, то все выводится
udata://news/lastlents/(vse_novosti)/notemplate/10/0
Есть разделы:
Лента
Лента 1
Новость 1
Новость 2
Лента 2
Новость 3
Новость 4
Почему код <xsl:apply-templates select="result" />
Не выводит список вложенных лент 1 и 2, если зайти в раздел "Лента"
в шаблоне /news/lastlents.xsl подключен.
<xsl:template match="udata[@module = 'news'][@method = 'lastlents']">
<xsl:param name="page_id" select="'6'" />
<div class="news_lents" umi:element-id="{$page_id}" umi:region="list" umi:module="news" umi:sortable="sortable" umi:button-position="top right" />
</xsl:template>
<xsl:template match="udata[@module = 'news'][@method = 'lastlents'][total]">
<xsl:param name="page_id" select="'6'" />
<div class="news_lents" umi:element-id="{$page_id}" umi:region="list" umi:module="news" umi:sortable="sortable" umi:button-position="top right">
<xsl:apply-templates select="items/item" />
</div>
</xsl:template>
<xsl:template match="udata[@method = 'lastlents']/items/item">
<a href="{@link}" umi:element-id="{@id}" umi:region="row" umi:field-name="name" umi:field-type="string" umi:delete="delete" umi:empty="&empty-section-name;" umi:url-attribute="href">
<xsl:apply-templates />
</a>
</xsl:template>
Да, захожу на страницу, тип данных которой "лента новостей"
И хочу увидеть вложенные страницы, тип данных которых тоже "лента новостей".
Изначально было <xsl:param name="page_id" select="'0'" />
Пустых <div class="news_lents"..../> нету.
Я могу сделать отдельный шаблон,
зайдя на страницу, тип данных которой "лента новостей"
и в шаблоне /layouts/default.xsl
Прописать <xsl:apply-templates select="document('udata://news/lastlents/(6)/notemplate/10/0')/udata"/> и тогда увижу вложенные ленты новостей и это работает. В общем чтобы не городить отдельный шаблон, как вывести вложенные страницы.
Или может в этом шаблона написать, условие если мы на странице news то выводим вложенные ленты.
<xsl:if test="$pageid = 6">
<xsl:apply-templates select="document('udata://news/lastlents/(6)/notemplate/10/0')/udata"/>
</xsl:if>
Если мы посмотрим .XML
Видим <result module="news" method="rubric" domain="domain.ru" lang="ru" header="Новости" title="UMI.CMS - Новости" site-name="umicms.demo site" request-uri="/news1.xml" pageId="6">
<xsl:if test="$pageid = 6"> то почему не выполняется проверка, как написать проверку текущей страницы?
Подскажите.
Как выводить ленту новостей автоматически?
В шаблоне если вписать вручную код, то все выводится
udata://news/lastlents/(vse_novosti)/notemplate/10/0
Есть разделы:
Лента
Лента 1
Новость 1
Новость 2
Лента 2
Новость 3
Новость 4
Почему код <xsl:apply-templates select="result" />
Не выводит список вложенных лент 1 и 2, если зайти в раздел "Лента"
в шаблоне /news/lastlents.xsl подключен.
<xsl:template match="udata[@module = 'news'][@method = 'lastlents']">
<xsl:param name="page_id" select="'6'" />
<div class="news_lents" umi:element-id="{$page_id}" umi:region="list" umi:module="news" umi:sortable="sortable" umi:button-position="top right" />
</xsl:template>
<xsl:template match="udata[@module = 'news'][@method = 'lastlents'][total]">
<xsl:param name="page_id" select="'6'" />
<div class="news_lents" umi:element-id="{$page_id}" umi:region="list" umi:module="news" umi:sortable="sortable" umi:button-position="top right">
<xsl:apply-templates select="items/item" />
</div>
</xsl:template>
<xsl:template match="udata[@method = 'lastlents']/items/item">
<a href="{@link}" umi:element-id="{@id}" umi:region="row" umi:field-name="name" umi:field-type="string" umi:delete="delete" umi:empty="&empty-section-name;" umi:url-attribute="href">
<xsl:apply-templates />
</a>
</xsl:template>
Ваш вопрос почему вы не видите на странице "Лента" дочерние ленты новостей?
При этом, в приведенном вами xml куске шаблонов мы видим шаблоны для вывода дочерних лент. Но мы не видим шаблона, который срабатывает по умолчанию для страниц типа "Лента новостей". По умолчанию, он такой
<xsl:template match="/result[@module = 'news'][@method = 'rubric']">
<xsl:apply-templates select="document('udata://news/lastlist/?extProps=publish_time,anons')" />
</xsl:template>
и тут четко видно, что система и не пытается вызвать макрос udata://news/lastlents/ для вывода дочерних лент. Возможно, в этом и есть решение вашей проблемы.