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

#
Выделение пункта меню (группа информ системы)
Разделы - это те что в структуре сайта прописаны, выделяються как надо, а вот текущую группу информ системы выделить нельзя, нашел решение для инет магазина, но к информ система прикрутить не смогу, подскажите как сделать.

Что имею:


<?php
$Structure = & singleton('Structure');
$param = array();
$param['show_groups'] = true;
$param['show_items'] = false;
$Structure->ShowStructure(1,'Меню',$param);
?>



<?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">
<ul class="menu"><xsl:apply-templates select="structure[show=1]"/></ul>
</xsl:template>
<xsl:template match="structure">
<li>
<!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
<xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>
<!-- Расчитываем размер отступа -->
<xsl:variable name="padding" select="level * 10" />
<!-- Показывать ссылку, или нет -->
<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">
<xsl:value-of disable-output-escaping="yes" select="name"/>
</xsl:when>
<!-- Иначе обычный вывод с пустым стилем -->
<xsl:otherwise>
<a href="{$link}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
<!-- Если не показывать ссылку - выводим просто имя ссылки -->
<xsl:if test="show_link=0">
<xsl:value-of disable-output-escaping="yes" select="name"/>
</xsl:if>
<!-- Выбираем подузлы структуры -->
<xsl:if test="current_structure_id=@id or count(.//structure[@id=$current_structure_id])=1">
<xsl:if test="count(structure[show=1]) > 0">
<ul><xsl:apply-templates select="structure"/></ul>
</xsl:if>
</xsl:if>
</li>
</xsl:template>
</xsl:stylesheet>


Как их модифицировать? в идеале было бы, если все было бы универсальным и для информ группы и для инет магазина.

Заранее спасибо.
Делаю сайты на HostCMS! Подробнее по почте anton.yurzanov@gmail.com
#
Re: Выделение пункта меню (группа информ системы)
ап
Делаю сайты на HostCMS! Подробнее по почте anton.yurzanov@gmail.com
Модератор
#
Re: Выделение пункта меню (группа информ системы)
Varkolak,
Посмотрите пример из "хлебных крошек" (код на php можно взять с демо-сайта), а вот интересующий Вас фрагмент из "хлебных крошек":

      <!-- Запишем в константу 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>
вместо
<!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
<xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>
Модератор
#
Re: Выделение пункта меню (группа информ системы)
А вот и интересующий Вас фрагмент PHP-кода:
<?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');
      $structure->ShowStructure(false, 'НекотороеМеню', $param, $external_propertys);
?>
#
Re: Выделение пункта меню (группа информ системы)
блин, спасибо, забыл про карту сайта!
Делаю сайты на HostCMS! Подробнее по почте anton.yurzanov@gmail.com
Модератор
#
Re: Выделение пункта меню (группа информ системы)
Varkolak,
Пожалуйста. Я про пример с хлебных крошек писал.
#
Re: Выделение пункта меню (группа информ системы)
Та же самая проблема, единственно, у меня несколько другой вариант вызова, но и с этим не выходит (
У меня вот так (это было где-то в форуме, уже давно использую его)
Вызов
<?php
                $InformationSystem = new InformationSystem () ;
                /*Определяем информацию об информационной системе, связанной с текущим узлом*/
                $InformationSystemId = 5;
                $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 = array();
            $param['parent_id'] = 94;
            $param['show_groups']=true;
            $param['show_items']=false;
            $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])=1">
               <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 писал(а):
Та же самая проблема, единственно, у меня несколько другой вариант вызова, но и с этим не выходит (

Что не выходит то, непонятна цель? Что Вы ожидаете увидеть, опишите.
#
Re: Выделение пункта меню (группа информ системы)
Есть инфосистема Торговая зона (id в структуре 94, id в инфосистемах 5)
у нее есть группы и подгруппы
если я нахожусь на странице подгруппы, то должно выводится
<h1>Группа - <span>активная подгруппа</span></h1>

для этого мне нужно проверять является ли группа активной, а эта проверка как раз и не работает, в xml выводятся все группы.
http://www.colibre.ru - Создание и продвижение сайтов
#
Re: Выделение пункта меню (группа информ системы)
Хотя мой шаблон для варианта, когда у меня выводится текущая группа в виде
<h1>Текущая Группа</h1>
http://www.colibre.ru - Создание и продвижение сайтов
Авторизация