Как определить принадлежности узла структуры вышестоящему родителю в XSL?

#
Как определить принадлежности узла структуры вышестоящему родителю в XSL?
В макете страницы можно проверить принадлежности узла структуры вышестоящему родителю через
NodeIsParent( int $children_node_id, int $parent_node_id );
А как сделать такую проверку в XSLif шаблоне?
#
Re: Как определить принадлежности узла структуры вышестоящему родителю в XSL?
по значению узла id_parent
Заказов не беру. Консультирую редко.
#
Re: Как определить принадлежности узла структуры вышестоящему родителю в XSL?
Я наверное не совсем так объяснил...
Я вывожу меню которое имеет подразделы. Для выделения основного пункта меню нужно узнать что текущий открытый пункт подменю принадлежит к основному меню (чтобы выделить основной пункт меню).
Т.е. мне нужно узнать, что CURRENT_STRUCTURE_ID является дочерним к STRUCTURE_ID.
Например основное меню имеет id 100, а подменю открытое в настоящий момент id 107 (т.е. CURRENT_STRUCTURE_ID = 107). Как в XSL проверить что CURRENT_STRUCTURE_ID является ребенком id 100.
Надеюсь понятно объяснил.
#
Re: Как определить принадлежности узла структуры вышестоящему родителю в XSL?
Galaxy, так это же есть в шаблонах стандартного демо-сайта "Корпорация":
<!-- Ссылка на пункт меню -->
<a href="{$link}" title="{name}">

   <!--
   Выделяем текущую страницу добавлением к <a> стиля font-weight: bold,
   если это текущая страница, либо у нее есть ребенок с атрибутом id, равным текущей группе.
   -->
   <xsl:if test="current_structure_id = @id or count(.//structure[@id=$current_structure_id]) = 1">
      <xsl:attribute name="style">font-weight: bold</xsl:attribute>
   </xsl:if>



   <xsl:value-of disable-output-escaping="yes" select="name"/>
</a>

Указанный фрагмент вставляется в вывод _основного_ пункта меню.
Заказов не беру. Консультирую редко.
#
Re: Как определить принадлежности узла структуры вышестоящему родителю в XSL?
Сейчас это и используется, но при переходе в элемент подменю (который в структуре находится внутри родителя) - такой код не работает и собственно не должен, т.к. идет проверка current_structure_id = @id, но id родительского меню не будет равно id дочернего (current_structure_id) открытого в данный момент.
Дополню:
Есть 2 меню - верхнее и левое.
Верхнее - 0 уровень структуры.
Левое - 1 уровень (вложено в Верхнее).
Оба меню выводятся своими XSL шаблонами.
При навигации по Верхнему - current_structure_id = @id обрабатывается как надо.
При переходе в Левое - current_structure_id выдает естественно id дочернего элемента.
Вот собственно и нужно узнать в шаблоне вывода Верхнего меню, что current_structure_id является ребенком по отношению к id Верхнего меню.
Либо как то подругому...


#
Re: Как определить принадлежности узла структуры вышестоящему родителю в XSL?
Galaxy, условие
current_structure_id = @id
для родительского меню не сработает, а вот вторая часть условия
or count(.//structure[@id=$current_structure_id]) = 1
как раз для этого.

Но как я понял, у вас меню формируется двумя разными XSL-шаблонами, тогда возможно в первом просто не хватает нужных даннх в XML, чтобы второе условие срабатывало.

Стукнитесь в аську с доступами - посмотрю.
Заказов не беру. Консультирую редко.
#
Re: Как определить принадлежности узла структуры вышестоящему родителю в XSL?
было бы неплохо и здесь написать ответ
#
Re: Как определить принадлежности узла структуры вышестоящему родителю в XSL?
придумал как сделать
$children_node_id = CURRENT_STRUCTURE_ID;//текущий узел
$parent_node_id = array(90,92,93,329,330,331);//массив возможных родителей

$external_propertys['parent_id'] = NULL;
for($i = 0; $i < count($parent_node_id); $i++)
{
   if ($structure->NodeIsParent($children_node_id, $parent_node_id[$i]))
   {
      $external_propertys['parent_id'] = $parent_node_id[$i];
   }
}


и в XSL проверка
<xsl:if test="current_structure_id = @id or @id = /document/parent_id">
   <xsl:attribute name="class">current</xsl:attribute>
</xsl:if>
Авторизация