Здравствуйте!
Возможно вопрос не сложный, но сам я в нем никак разберусь
Есть верхнее меню содержащее относительные ссылки, и абсолютные на сторонние ресурсы.
Как и какой xsl-шаблон изменить, чтоб внешние ссылки открывались в новых вкладках?
Перерыл весь форум и не нашел решения.....
Единственная подходящая мне тема была . Но у меня не сработало.
заменял
<!-- Если внешняя ссылка -->
<xsl:when test="url != ''">
<xsl:value-of disable-output-escaping="yes" select="url"/>
</xsl:when>
<!-- Иначе если внутренняя ссылка -->
<xsl:otherwise>
<xsl:value-of disable-output-escaping="yes" select="link"/>
</xsl:otherwise>
на:
<xsl:choose>
<!-- Если внешняя ссылка -->
<xsl:when test="is_external_link=1"><a href="{$link}" target="_blank"><span style="{$link_style}"><xsl:value-of disable-output-escaping="yes" select="name"/></span></a></xsl:when>
<!-- Иначе если внутренняя ссылка -->
<xsl:otherwise><a href="{$link}"><span style="{$link_style}"><xsl:value-of disable-output-escaping="yes" select="name"/></span></a></xsl:otherwise>
</xsl:choose>
Предполагаю потому что у меня кодировка utf-8, а в теме windows-1251, но могу ошибаться....
Мой XLS-шаблон Верхнего меню:
<xsl:template match="/site">
<ul class="top_menu">
<!-- Выбираем узлы структуры первого уровня -->
<xsl:apply-templates select="structure[show=1]" />
</ul>
</xsl:template>
<!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
<xsl:variable name="current_structure_id" select="/site/current_structure_id"/>
<xsl:template match="structure">
<li>
<!--
Выделяем текущую страницу добавлением к li класса current,
если это текущая страница, либо у нее есть ребенок с атрибутом id, равным текущей группе.
-->
<xsl:if test="$current_structure_id = @id or count(.//structure[@id=$current_structure_id]) = 1">
<xsl:attribute name="class">current</xsl:attribute>
</xsl:if>
<!-- Определяем адрес ссылки -->
<xsl:variable name="link">
<xsl:choose>
<!-- Если внешняя ссылка -->
<xsl:when test="url != ''">
<xsl:value-of disable-output-escaping="yes" select="url"/>
</xsl:when>
<!-- Иначе если внутренняя ссылка -->
<xsl:otherwise>
<xsl:value-of disable-output-escaping="yes" select="link"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- Ссылка на пункт меню -->
<a href="{$link}" hostcms:id="{@id}" hostcms:field="name" hostcms:entity="structure"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
</li>
</xsl:template>
</xsl:stylesheet>
Вообщем плохо быть по пояс деревянным.... Буду признателен за помощь!
<xsl:template match="/site">
<ul class="top_menu">
<!-- Выбираем узлы структуры первого уровня -->
<xsl:apply-templates select="structure[show=1]" />
</ul>
</xsl:template>
<!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
<xsl:variable name="current_structure_id" select="/site/current_structure_id"/>
<xsl:template match="structure">
<li>
<!--
Выделяем текущую страницу добавлением к li класса current,
если это текущая страница, либо у нее есть ребенок с атрибутом id, равным текущей группе.
-->
<xsl:if test="$current_structure_id = @id or count(.//structure[@id=$current_structure_id]) = 1">
<xsl:attribute name="class">current</xsl:attribute>
</xsl:if>
<!-- Определяем адрес ссылки -->
<xsl:variable name="link">
<xsl:choose>
<!-- Если внешняя ссылка -->
<xsl:when test="url != ''">
<xsl:value-of disable-output-escaping="yes" select="url"/>
</xsl:when>
<!-- Иначе если внутренняя ссылка -->
<xsl:otherwise>
<xsl:value-of disable-output-escaping="yes" select="link"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- Ссылка на пункт меню -->
<xsl:choose>
<!-- Если внешняя ссылка -->
<xsl:when test="url != ''">
<a target="_blank" href="{$link}" hostcms:id="{@id}" hostcms:field="name" hostcms:entity="structure"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
</xsl:when>
<!-- Иначе если внутренняя ссылка -->
<xsl:otherwise>
<a href="{$link}" hostcms:id="{@id}" hostcms:field="name" hostcms:entity="structure"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
</xsl:otherwise>
</xsl:choose>
</li>
</xsl:template>
</xsl:stylesheet>
<xsl:template match="/site">
<ul class="top_menu">
<!-- Выбираем узлы структуры первого уровня -->
<xsl:apply-templates select="structure[show=1]" />
</ul>
</xsl:template>
<!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
<xsl:variable name="current_structure_id" select="/site/current_structure_id"/>
<xsl:template match="structure">
<li>
<!--
Выделяем текущую страницу добавлением к li класса current,
если это текущая страница, либо у нее есть ребенок с атрибутом id, равным текущей группе.
-->
<xsl:if test="$current_structure_id = @id or count(.//structure[@id=$current_structure_id]) = 1">
<xsl:attribute name="class">current</xsl:attribute>
</xsl:if>
<!-- Определяем адрес ссылки -->
<xsl:variable name="link">
<xsl:choose>
<!-- Если внешняя ссылка -->
<xsl:when test="url != ''">
<xsl:value-of disable-output-escaping="yes" select="url"/>
</xsl:when>
<!-- Иначе если внутренняя ссылка -->
<xsl:otherwise>
<xsl:value-of disable-output-escaping="yes" select="link"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- Ссылка на пункт меню -->
<xsl:choose>
<!-- Если внешняя ссылка -->
<xsl:when test="url != ''">
<a target="_blank" href="{$link}" hostcms:id="{@id}" hostcms:field="name" hostcms:entity="structure"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
</xsl:when>
<!-- Иначе если внутренняя ссылка -->
<xsl:otherwise>
<a href="{$link}" hostcms:id="{@id}" hostcms:field="name" hostcms:entity="structure"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
</xsl:otherwise>
</xsl:choose>
</li>
</xsl:template>
</xsl:stylesheet>
заменил код шаблона для 'верхнего меню' на ваш вариант, но это никак не повлияло на работу сайта.... Будто ничего не изменилось.
Внешние ссылки добавлены как раздел структуры -> Ссылка на другой файл -> http://#/#/# (написал на всякий случай)
Возможно мне нужно было внести в код "какой-то конкретики", но т.к. XSL я, можно сказать, вижу в первый раз, то не знаю какой.
Спасибо за уделенное время!
Mcross,
Т.е. если не работает, то не добавилось... или не туда?
потому что не внешние, не внутренние ссылки не открываются в новом окне.
Если не надоело мне помогать ) то есть ли еще идеи?
Mcross,
Спасибо за помощь!!!! Разобрался вроде!!!
У меня там еще было "Выпадающее меню"....Я думал, что оно отвечает только за вкладки меню.
имело такой вид:
<xsl:template match="/site">
<div id="cssmenu">
<ul>
<!-- Выбираем узлы структуры первого уровня -->
<xsl:apply-templates select="*[@id][show=1][active=1]" />
</ul>
</div>
</xsl:template>
<!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
<xsl:variable name="current_structure_id" select="/site/current_structure_id"/>
<xsl:template match="/site">
<div id="cssmenu">
<ul>
<!-- Выбираем узлы структуры первого уровня -->
<xsl:apply-templates select="*[@id][show=1][active=1]" />
</ul>
</div>
</xsl:template>
<!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
<xsl:variable name="current_structure_id" select="/site/current_structure_id"/>
<xsl:template match="/site">
<div id="cssmenu">
<ul>
<!-- Выбираем узлы структуры первого уровня -->
<xsl:apply-templates select="*[@id][show=1][active=1]" />
</ul>
</div>
</xsl:template>
<!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
<xsl:variable name="current_structure_id" select="/site/current_structure_id"/>