HostCMS писал(а):
можно передавать через внешние параметры путь, а потом просто путь узла сравнивать с переданным, если совпадает — выделять
Решение работает. Подробности для тех, кому интересно:
В макете при вызове меню через внешний параметр передаем текущий путь:
$Structure = & singleton('Structure');
$param = array();
$param['parent_id'] = 0;
$external_propertys = array();
$external_propertys['currentPath'] = $_SERVER['REQUEST_URI'];
$Structure->ShowStructure(2,'MenuLeft',$param,$external_propertys);
В XSL-шаблоне добавляем проверку - содержит ли текущий путь XML из external_link:
<!-- Запишем в переменную текущий путь -->
<xsl:variable name="current_path">
<xsl:value-of disable-output-escaping="yes" select="/document/currentPath"/>
</xsl:variable>
...
<xsl:choose>
<!-- Выделяем текущую страницу жирным (если это текущая страница, либо у нее есть ребенок с ID, равным текущей, либо текущий путь содержит путь из external_link) -->
<xsl:when test="current_structure_id=@id or count(.//structure[@id=$current_structure_id])=1 or contains($current_path,$link)">
<a href="{$link}" class="act">
<xsl:value-of disable-output-escaping="yes" select="name"/>
</a>
</xsl:when>
<!-- Иначе обычный вывод с пустым стилем -->
<xsl:otherwise>
<a href="{$link}">
<xsl:value-of disable-output-escaping="yes" select="name"/>
</a>
</xsl:otherwise>
</xsl:choose>