Xpoint
   [напомнить пароль]

Меню для сайта средствами XML/XSL: История

Внимание! Данный интерфейс находится в стадии глубокой переделки. Наберитесь терпения.

Последнее изменение

11 лет назад Eugene Efremov[досье] изменил текст:
Текст: Однако, можно сделать все гораздо проще. Определим ключ, ссылающийся на _предков_ нужного элемента:¶

<<<(xslt)¶
<xsl:key name='menu-curr' match="*[@href = $request-uri]" use='ancestor::group / head / @href'/>¶
>>>¶


<xsl:template match='group' mode='menu'>¶
<xsl:variable name='class'>¶
<xsl:choose>¶
<xsl:when test="key('menu-curr', head / @href)">on</xsl:when>¶
<xsl:otherwise>off</xsl:otherwise>¶
</xsl:choose>¶

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"¶


<xsl:key name='menu-curr' match="*[@href = $request-uri]" use='ancestor::group / head / @href'/>¶

<xsl:template match='menu' mode='menu'>¶

<xsl:template match='group' mode='menu'>¶
<xsl:variable name='class'>¶
<xsl:choose>¶
<xsl:when test="key('menu-curr', head / @href)">on</xsl:when>¶
<xsl:otherwise>off</xsl:otherwise>¶
</xsl:choose>¶

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"¶


<xsl:key name='menu-curr' match="*[@href = '&uri;']" use='ancestor::group / head / @href'/>¶
<!-- в &uri; — ссылка на текущую страницу в том же формате, как в menu.xml -->¶



Как уже отмечалось выше, можно подойти к проблеме более радикально и вообще отказаться от использования URI в качестве идентификаторов. Вместо этого уникальный идентификатор присваивается корневому элементу XML, над которым осуществляется преобразование. Тогда, пока мы не переключили контекст при помощи =#document()#=, он будет нам доспупен как =#/*/@id#= (=#*#= -- потому что мы, в общем случае, не знаем, какой у этого XML корневой элемент). В общем случае целесообразно определить в головном XSL переменную =#$id#=: ¶
<<<(xslt)¶
<xsl:variable name='id' select='/* / @id'/>¶
>>>¶
И в меню, наряду с адресами страниц, используются эти id:¶

Тогда нам достаточно всего лишь изменить наш XSL следующим образом:¶
<<<(xslt)¶
<xsl:template match="*" mode='menu-check'>¶
<a href="{document('citepages.xml') / cite / page[@ref = current() / @idref]}">¶
<xsl:value-of select="."/>¶
</a>¶

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"¶


<xsl:key name='menu-curr' match="m:*[@ref = /* / @id]" use='ancestor::m:group / m:head / @ref'/>¶
...¶
>>>¶

История предыдущих изменений

изменения дата автор
текст 2006-09-21 16:20:55 (11 лет назад) Eugene Efremov[досье]
текст 2006-09-20 19:17:48 (11 лет назад) Eugene Efremov[досье]
путь 2006-09-20 15:14:25 (11 лет назад) Дмитрий Попов[досье]
заголовок 2006-09-18 11:46:31 (11 лет назад) Денис Ибаев aka Dionys[досье]
текст 2006-09-16 22:21:53 (11 лет назад) Eugene Efremov[досье]
текст 2006-09-16 21:59:14 (11 лет назад) Eugene Efremov[досье]
текст 2006-09-16 19:55:05 (11 лет назад) Eugene Efremov[досье]
текст 2006-09-16 18:58:49 (11 лет назад) Eugene Efremov[досье]
текст 2006-09-16 18:15:42 (11 лет назад) Eugene Efremov[досье]
текст 2006-09-16 04:34:17 (11 лет назад) Eugene Efremov[досье]
текст 2006-09-16 04:01:35 (11 лет назад) Eugene Efremov[досье]
текст 2006-09-15 23:31:22 (11 лет назад) Eugene Efremov[досье]
текст, заголовок 2006-09-15 19:10:25 (11 лет назад) Eugene Efremov[досье]
путь 2006-09-13 17:36:59 (11 лет назад) Сергей Чернышев[досье]
текст, заголовок 2006-09-07 12:59:18 (11 лет назад) Надя Строганкова[досье]
RSS
Powered by POEM™ Engine Copyright © 2002-2005