Как вариант:
<xsl:variable name="pId" select="/result/@pageId" />
<xsl:variable name="parentId" select="/result/page/@parentId" />
<xsl:choose>
<xsl:when test="$pId = '3' or $parentId = '3'">
<xsl:apply-templates select="document('udata://content/menu//3/3')/udata/items"/>
</xsl:when>
<xsl:when test="$pId = '4' or $parentId = '4'">
<xsl:apply-templates select="document('udata://content/menu//3/4')/udata/items"/>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="document('udata://content/menu//3/0')/udata/items"/>
</xsl:otherwise>
</xsl:choose>
да ты правильно понял создаем в шаблоне данных "псевдо каталог" (у меня у этого типа id=126) он подтип "Старинца контента"
В итоге обычная страница имеет такие строки в xml виде
<page id="22" parentId="0" link="/obychnaya_stranica/" is-visible="1" is-active="1" object-id="504" type-id="43" type-guid="content-page" update-time="1312267043" alt-name="obychnaya_stranica">
А страница тиа "псевдо каталог" такую строку
<page id="67" parentId="0" link="/obychnaya_stranica1/" is-visible="1" is-active="1" object-id="591" type-id="126" update-time="1312267046" alt-name="obychnaya_stranica1">
ориентируясь по type-id ты можешь строит предикаты для достижению нужного эффекта например такой файл шаблона если его назначить обычной странице и странице с типом данных 126 (псевдо каталог) при выводе покажет кто есть кто)
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xlink="http://www.w3.org/TR/xlink"
xmlns:umi="http://www.umi-cms.ru/TR/umi"
exclude-result-prefixes="xlink">
<xsl:output encoding="utf-8" method="html" indent="yes"/>
<xsl:template match="/">
<html class="u-eip">
<head>
</head>
<body>
<h1 umi:element-id="{result/@pageId}" umi:field-name="h1" umi:delete="delete" umi:empty="Заголовок страницы">
<xsl:value-of select="result/@header" />
</h1>
<xsl:apply-templates select="result" />
</body>
</html>
</xsl:template>
<xsl:template match="result">
шаблон для всех остальных страниц
</xsl:template>
<xsl:template match="result[page/@type-id='126']">
шаблон для псевдо каталога
</xsl:template>
</xsl:stylesheet>
Где-то я всё-таки не догоняю. Итак, что получилось а что нет.
Как посоветовал admin заводим отдельный тип данных для уже имеющегося типа "Страница контента", и назовём его пусть "Страница каталога". Пусть id нашего нового типа данных будет 126. При создании(редактировании) страницы, если она должна быть в разделе каталога не забываем в админке поменять тип данных со "Страница контента" на "Страница каталога".
Теперь пропишем отдельный шаблон для этого типа. По аналогии (смотрим чуть выше на два сообщения). Я редактировал шаблон content.xsl который находится у меня в \xsltTpls\modules\content. В него добавил следущее:
<xsl:template match="result[page/@type-id='126']">
<xsl:apply-templates select=".//property[@name = 'content']" />
<!-- Выводим ссылки -->
<div class="paging">
<xsl:apply-templates select="document('udata://content/menu')/udata" mode="catalog"/>
</div>
</xsl:template>
Теперь надо добавить в файл в котором у нас формируется меню шаблон для наших ссылок с mode="catalog"
И вот тут опять ступор. Дошёл вот до такого кода:
<xsl:template match="udata[@method = 'menu']" mode="catalog">
<ul>
<xsl:apply-templates select="items/item" mode="catalog"/>
</ul>
</xsl:template>
<xsl:template match="items/item" mode="catalog">
</xsl:template>
<xsl:template match="items/item[@status = 'active']" mode="catalog">
<li>
<xsl:apply-templates select="document(concat('udata://content/menu///', @id))/udata[items/item]"/>
</li>
</xsl:template>
<xsl:template match="items/item">
<a href="{@link}">
<xsl:value-of select="@name"/>
</a>
</xsl:template>
Но работает он криво. Выводит ссылки на текущий уровень вложенности, а не на следующий как по идее должно быть. И отрабатывает не совсем корректно, все ссылки выводятся в одном <li> и в конце выводится какая-то циферка. Ну понятно что не какая-то а номер id родительской страницы. Вот как-то так, здесь я приплыл.
Прошу совета, помощи.
я сегодня удалил какого-то пользователя или его сообщение, в процессе чистки форума от спамеров. Отзовись, мы тебя восстановим или перерегистрируем))
пользователь оставил сообщение:
Что-то в этом роде.. проверить пока не могу )
<xsl:template match="result[page/@type-id='126']">
<xsl:apply-templates select=".//property[@name = 'content']" />
<!-- Выводим ссылки -->
<div class="paging">
<xsl:apply-templates select="document('udata://content/menu//3/0')/udata/items" mode="catalog"/>
</div>
</xsl:template>
<xsl:template match="items" mode="catalog">
<ul>
<xsl:apply-templates select="item" mode="catalog"/>
</ul>
</xsl:template>
<xsl:template match="item" mode="catalog">
<li>
<xsl:apply-templates select="document(concat('udata://content/menu//2/', @id))/udata/items"/>
</li>
</xsl:template>
<xsl:template match="item[@status = 'active']" mode="catalog">
<li>
<xsl:apply-templates select="document(concat('udata://content/menu//2/', @id))/udata/items"/>
</li>
</xsl:template>
Решение проблемы с Подменю...
Просто необходимо сделать проверку, если мы находимся в Папке, то выводим подразделы, а если находимся в самом подразделе, то выводим все подразделы папки нашего подраздела в котором находимся.
Вот и все...
Папка
- Подраздел 1
- Подраздел 2
Папка 2
- Подраздел 1
- Подраздел 2
Это вставляем где надо выводить подменю:
<!-- Дополнительное меню -->
<xsl:for-each select="/result">
<xsl:choose>
<xsl:when test="/result/page/@parentId='0'">
<xsl:apply-templates select="document(concat('udata://content/menu/0/1/',/result/@pageId))/udata" mode="menu"/>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="document(concat('udata://content/menu/0/1/',/result/page/@parentId))/udata" mode="menu"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
<!-- #Конец доп. меню -->
И сам шаблон подменю:
<!-- Menu -->
<xsl:template match="udata[@module = 'content'][@method = 'menu']" mode="menu">
<ul umi:add-method="popup"
umi:sortable="sortable"
umi:method="menu"
umi:module="content"
umi:element-id="{../@id}">
<xsl:apply-templates select="items/item" mode="menu"/>
</ul>
</xsl:template>
<xsl:template match="item" mode="menu">
<li>
— <a href="{@link}" class="left" umi:element-id="{@id}" umi:region="row" umi:field-name="name" umi:empty="&empty-section-name;" umi:delete="delete">
<xsl:value-of select="@name" />
</a>
</li>
</xsl:template>
<xsl:template match="item[@status = 'active']" mode="menu">
<li class="active">
— <a href="{@link}" class="left">
<xsl:value-of select="@name"/>
</a>
</li>
</xsl:template>
<!-- #Menu -->
Внимание! В приведенном шаблоне подключен Edit-in-Place. Будьте внимательны!