Выделение пункта меню (группа информ системы)

Модератор
#
Re: Выделение пункта меню (группа информ системы)
libertine,
у Вас в php-коде не передается через внешние параметры ни item, ни group
Посмотрите я выше пример давал php-кода
#
Re: Выделение пункта меню (группа информ системы)
То, что вы предлагаете у меня тоже не работает ( Он выводит все группы, но текущую не определяет
http://www.colibre.ru - Создание и продвижение сайтов
#
Re: Выделение пункта меню (группа информ системы)
Шаблон вот такой
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
   
   <xsl:template match="/document">
      <!-- Выбираем узлы структуры -->
      <xsl:apply-templates select="structure[show=1]"/>
   </xsl:template>
   
   <xsl:template match="structure">
      
      <!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
      <xsl:variable name="current_structure_id">
         <xsl:choose>
            <xsl:when test="item/node()">item_<xsl:value-of select="item"/></xsl:when>
            <xsl:when test="group/node()">group_<xsl:value-of select="group"/></xsl:when>
            <xsl:otherwise>
               <xsl:value-of select="structure/current_structure_id"/>
            </xsl:otherwise>
         </xsl:choose>
      </xsl:variable>
      
      <!-- Показывать ссылку, или нет -->
      <xsl:if test="show_link=1">
         <!-- Определяем адрес ссылки -->
         <xsl:variable name="link">
            <xsl:choose>
               <!-- Если внешняя ссылка -->
               <xsl:when test="is_external_link=1">
                  <xsl:value-of disable-output-escaping="yes" select="external_link"/>
               </xsl:when>
               <!-- Иначе если внутренняя ссылка -->
               <xsl:otherwise>
                  <xsl:value-of disable-output-escaping="yes" select="link"/>
               </xsl:otherwise>
            </xsl:choose>
         </xsl:variable>
         
         <xsl:choose>
            <!-- Выделяем текущую страницу жирным (если это текущая страница, либо у нее есть ребенок с ID, равным текущей) -->
            <xsl:when test="$current_structure_id=@id or count(.//structure[@id=$current_structure_id]) &gt; 0">
               <h1><xsl:value-of disable-output-escaping="yes" select="name"/></h1>
            </xsl:when>
            <!-- Иначе обычный вывод с пустым стилем -->
            <xsl:otherwise></xsl:otherwise>
         </xsl:choose>
      </xsl:if>
      
      <!-- Если не показывать ссылку - выводим просто имя ссылки -->
      <xsl:if test="show_link=0">
         <xsl:value-of disable-output-escaping="yes" select="name"/>
      </xsl:if>
   </xsl:template>
</xsl:stylesheet>
http://www.colibre.ru - Создание и продвижение сайтов
Модератор
#
Re: Выделение пункта меню (группа информ системы)
libertine,
покажите код вызова на php
#
Re: Выделение пункта меню (группа информ системы)
Вот такой
<?php
$InformationSystem = & singleton('InformationSystem');

      // Определяем информацию об информационной системе, связанной с текущим узлом
      $InformationSystem_id = $InformationSystem->GetInformationSystemByStructureId(CURRENT_STRUCTURE_ID);

      $param = array();

      // Доп. св-ва для структуры отключаем
      $param['xml_show_structure_property'] = false;

      $external_propertys = array();

      // Если с узлом структуры связана ИС
      if ($InformationSystem_id)
      {
         $result = $InformationSystem->GetInformationFromPath($InformationSystem_id, '', false);

         // определяем id информационного элемента
         if ($result['item'])
         {
            $item_id = $InformationSystem->GetIdInformationItem($result['item'], $result['group'], $InformationSystem_id);

            if ($item_id != 0)
            {
               $external_propertys['item'] = $item_id;

              $param['show_groups'] = true;
               //$param['show_items'] = array($item_id);
            }
         }
         else
         {
            $item_id = false;
         }

         if (is_array($result) && $result['group'] > 0)
         {
            // Передаем во внешние параметры ID элемента и группы
            $external_propertys['group'] = $result['group'];
            $param['show_groups'] = true;
         }

         // Данные для хлебных крошек заполняем только для текущей ИС
         //$param['show_information_systems'][] = $InformationSystem_id;
      }
      elseif (class_exists('shop'))
      {
         $shop = & singleton('shop');

         // Определяем информацию о магазине, связанным с магазином
         $shop_row = $shop->GetShopWhithStructureId(CURRENT_STRUCTURE_ID, CURRENT_SITE);

         if ($shop_row)
         {
            $result = $shop->GetItemPath($shop_row['shop_shops_id'], '', false);

            // определяем id информационного элемента
            if ($result['item'])
            {
               $item_id = $result['item'];

               if ($item_id != 0)
               {
                  $external_propertys['item'] = $item_id;

                  //$param['show_shop_groups'] = true;
                  //$param['show_shop_items'] = array($item_id);
               }
            }
            else
            {
               $item_id = false;
            }

            if (is_array($result) && $result['group'] > 0)
            {
               // Передаем во внешние параметры ID элемента и группы

               $external_propertys['group'] = $result['group'];

               //$param['show_shop_groups'] = true;
            }
         }
      }
      $structure = & singleton('Structure');
      $param['parent_id'] = 94;
      $structure->ShowStructure(false, 'ХлебныеКрошкиТорговая', $param, $external_propertys);
      ?>
http://www.colibre.ru - Создание и продвижение сайтов
#
Re: Выделение пункта меню (группа информ системы)
Есть какие-нибудь подвижки? Сама ну никак понять не могу, где я накосячила (
http://www.colibre.ru - Создание и продвижение сайтов
#
Re: Выделение пункта меню (группа информ системы)
libertine, просьба уточнить: вы выводите хлебные крошки отдельным XSL-шаблоном, находясь в группе инфосистемы? Если да, то почему бы не добавить построение хлебных крошек непосредственно в XSL-шаблон для вывода инфосистемы?
#
Re: Выделение пункта меню (группа информ системы)
нет не отдельным шаблоном, а в макете
http://www.colibre.ru - Создание и продвижение сайтов
#
Re: Выделение пункта меню (группа информ системы)
libertine, понятно, что в макете. Но при этом используется вызов метода с XSL-шаблоном? Почему все-таки хлебные крошки не формируются в XSL-шаблоне для списка элементов инфосистемы?
#
Re: Выделение пункта меню (группа информ системы)
Все, я окончательно запуталась ( Я вас категорически не понимаю
Давайте с самого начала
Есть инфосистема Торговая зона (id в структуре 94, id в инфосистемах 5)
у нее есть группы и подгруппы
если я нахожусь на странице подгруппы, то должно выводится
<h1>Группа - <span>активная подгруппа</span></h1>

для этого мне нужно проверять является ли группа активной, а эта проверка не работает.
Почему не могу инфосистемой, т.к. подобная же структура должна быть и для обычных статических страниц и для магазина, но в других местах т.е. это некий купированный вариант хлебных крошек. Для конкретно этого вывода можно бы, конечно, и инфосистемы, но мне нужен более общий вариант (
Вызов есть такой
<?php
            $InformationSystem = new InformationSystem () ;
            /*Определяем информацию об информационной системе, связанной с текущим узлом*/
            $InformationSystemId = 1;
            $arr = array();
            $arr = $InformationSystem->GetInformationFromPath(1);
            $rez_item = false;
            $rez_item = $InformationSystem->GetIdInformationItem($arr['item'],$arr['group'],$InformationSystemId);
            $external_propertys = array();
            if($arr['group'] != false && $arr['group'] != 0)
            {
            $external_propertys['ТекущаяГруппа'] = $arr['group'];
            };
            $structure = new Structure () ;
      $param['parent_id'] = 94;
      $structure->ShowStructure(1, 'ХлебныеКрошкиТорговая', $param, $external_propertys);            
      ?>

Или то, что выше, но тот, что выше сложноват для моего восприятия, а этот метод вызова я уже использовала и он работал
а шаблон, вот такой
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
   
   <xsl:template match="/document">
      <!-- Выбираем узлы структуры -->
      <xsl:apply-templates select="structure[show=1]"/>
   </xsl:template>
   
   <xsl:template match="structure">
      
      <!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
      <xsl:variable name="current_structure_id">
         <xsl:choose>
            <xsl:when test="item/node()">item_<xsl:value-of select="item"/></xsl:when>
            <xsl:when test="group/node()">group_<xsl:value-of select="group"/></xsl:when>
            <xsl:otherwise>
               <xsl:value-of select="structure/current_structure_id"/>
            </xsl:otherwise>
         </xsl:choose>
      </xsl:variable>
      
      <!-- Показывать ссылку, или нет -->
      <xsl:if test="show_link=1">
         <!-- Определяем адрес ссылки -->
         <xsl:variable name="link">
            <xsl:choose>
               <!-- Если внешняя ссылка -->
               <xsl:when test="is_external_link=1">
                  <xsl:value-of disable-output-escaping="yes" select="external_link"/>
               </xsl:when>
               <!-- Иначе если внутренняя ссылка -->
               <xsl:otherwise>
                  <xsl:value-of disable-output-escaping="yes" select="link"/>
               </xsl:otherwise>
            </xsl:choose>
         </xsl:variable>
         
         <xsl:choose>
            <!-- Выделяем текущую страницу жирным (если это текущая страница, либо у нее есть ребенок с ID, равным текущей) -->
            <xsl:when test="$current_structure_id=@id or count(.//structure[@id=$current_structure_id]) &gt; 0">
               <h1><xsl:value-of disable-output-escaping="yes" select="name"/>
                  <!-- Выводим подуровни меню -->
                  <xsl:if test="count(structure[show = 1]) &gt; 0">
                     - <xsl:apply-templates select="structure[show=1]" mode="pool"/>
                  </xsl:if>
               </h1>
            </xsl:when>
            <!-- Иначе обычный вывод с пустым стилем -->
            <xsl:otherwise></xsl:otherwise>
         </xsl:choose>
      </xsl:if>
      
      <!-- Если не показывать ссылку - выводим просто имя ссылки -->
      <xsl:if test="show_link=0">
         <xsl:value-of disable-output-escaping="yes" select="name"/>
      </xsl:if>
   </xsl:template>
   
   <xsl:template match="structure" mode="pool">
      <!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
      <xsl:variable name="current_structure_id">
         <xsl:choose>
            <xsl:when test="item/node()">item_<xsl:value-of select="item"/></xsl:when>
            <xsl:when test="group/node()">group_<xsl:value-of select="group"/></xsl:when>
            <xsl:otherwise>
               <xsl:value-of select="structure/current_structure_id"/>
            </xsl:otherwise>
         </xsl:choose>
      </xsl:variable>
      
      <!-- Показывать ссылку, или нет -->
      <xsl:if test="show_link=1">
         <!-- Определяем адрес ссылки -->
         <xsl:variable name="link">
            <xsl:choose>
               <!-- Если внешняя ссылка -->
               <xsl:when test="is_external_link=1">
                  <xsl:value-of disable-output-escaping="yes" select="external_link"/>
               </xsl:when>
               <!-- Иначе если внутренняя ссылка -->
               <xsl:otherwise>
                  <xsl:value-of disable-output-escaping="yes" select="link"/>
               </xsl:otherwise>
            </xsl:choose>
         </xsl:variable>
         
         <xsl:choose>
            <!-- Выделяем текущую страницу жирным (если это текущая страница, либо у нее есть ребенок с ID, равным текущей) -->
            <xsl:when test="$current_structure_id=@id or count(.//structure[@id=$current_structure_id])=1">
               <span><xsl:value-of disable-output-escaping="yes" select="name"/></span>
            </xsl:when>
            <!-- Иначе обычный вывод с пустым стилем -->
            <xsl:otherwise></xsl:otherwise>
         </xsl:choose>
      </xsl:if>
      
      <!-- Если не показывать ссылку - выводим просто имя ссылки -->
      <xsl:if test="show_link=0">
         <xsl:value-of disable-output-escaping="yes" select="name"/>
      </xsl:if>
   </xsl:template>
</xsl:stylesheet>
http://www.colibre.ru - Создание и продвижение сайтов
Авторизация