Меню

Модератор
#
Re: Меню
alexmak,
посмотрите поиском по сайту. Вообще готовых меню в сети полно, просто стоит поискать, а как найдете понравившееся переделать на XSL, там ничего сложного.
#
Re: Меню
Спасибо!
www.chr21.ru
#
Re: Меню
Эх, а как бы хотя бы третий уровень вложенности сделать?
У меня структура такая:
Сервис/
Сервис/гарантия/
Сервис/гарантия/производитель1/
Сервис/гарантия/производитель2/
Сервис/негарантия/
По предложенному решению - второй уровень работает отлично, но что делать с третьим (что бы было видно производитель1, производитель2)?
Помогите пожалуйста
#
Re: Меню
Уточню немного:
Вышеописаная структура - это не инфосистема, а некоторое количество статических страниц.
А задача стоит так:
на сайте есть раздел "Сервис"
Сейчас в этом разделе отображаются подразделы:
гарантия/
негарантия/
а нужно, что бы при переходе в подраздел "гарантия/"
отображались документы, находящиеся в подразделе "гарантия/"
и все подразделы раздела "сервис"
то есть
гарантия - активно

  • подраздел1
  • подраздел2

негарантия
Модератор
#
Re: Меню
Absolut,
Судя по всему Вам нужно также, как у нас в правом меню: http://www.hostcms.ru/documentation/server/site-archive/

Тогда делаете так:
<?
   $Structure = new Structure();

   // Получаем данные о текущей странице
   $structure_parent_id = CURRENT_STRUCTURE_ID;

   while ($structure_parent_id != 0)
   {
      $row_structure = $Structure->GetStructureItem($structure_parent_id);
      $structure_parent_id = $row_structure['structure_parent_id'];
   }

   $Structure->ShowStructure(false, 'СписокЭлементовМеню', array('parent_id' => $row_structure['structure_id'], 'show_groups' => true));
   ?>


и XSL-шаблон "СписокЭлементовМеню":
<?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">
   <div class="left_menu">
      <ul>
      <!-- Выбираем узлы структуры -->
      <xsl:apply-templates select="structure[show=1]"/>
      </ul>
   </div>
</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:variable name="link_style"><xsl:choose>
            <!-- Выделяем текущую страницу жирным (если это текущая страница, либо у нее есть ребенок с ID, равным текущей) -->
            <xsl:when test="current_structure_id=@id or count(.//structure[@id=$current_structure_id])=1">font-weight: bold</xsl:when>
            <!-- Иначе обычный вывод с пустым стилем -->
            <xsl:otherwise></xsl:otherwise>
         </xsl:choose></xsl:variable>
         
         <a href="{$link}"><span style="{$link_style}"><xsl:value-of disable-output-escaping="yes" select="name"/></span></a>
      </xsl:if>

      <!-- Если не показывать ссылку - выводим просто имя ссылки -->
      <xsl:if test="show_link=0">
         <!-- <img border="0" src="/images/menu_point.gif" class="menu_point" width="4" height="7" /> -->
         <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
      and count(structure[show=1]) > 0">
         <ul>
            <!-- Выбираем узлы структуры -->
            <xsl:apply-templates select="structure[show=1]"/>
         </ul>
      </xsl:if>
   </li>
</xsl:template>
</xsl:stylesheet>
#
Re: Меню
получилось всё пусто
В шаблон страницы вставил:
<?
   $Structure = new Structure();

   // Получаем данные о текущей странице
   $structure_parent_id = CURRENT_STRUCTURE_ID;

   while ($structure_parent_id != 0)
   {
      $row_structure = $Structure->GetStructureItem($structure_parent_id);
      $structure_parent_id = $row_structure['structure_parent_id'];
   }

   $Structure->ShowStructure(false, 'СписокЭлементовМеню', array('parent_id' => $row_structure['structure_id'], 'show_groups' => true));
   ?>

В разделе XSL шаблоны/меню
Создал XSL шаблон, приведеный Вами, с именем, который Вы указали, на странице не отображается ничего, там, где должно быть меню
А нужно именно то, что Вы показали в примере
#
Re: Меню
Шаманство!
Всё заработало после удаления и создания заново разделов в структуре
Модератор
#
Re: Меню
Absolut,
Вопрос считаем закрытым
#
Re: Меню
У меня вот какая беда:

Сайт www.chr21.ru
В меню раздел "Портфолио" - информационная система "Портфолио".
Я сделал вывод групп портфолио в меню в виде вложенностей таким образом:
<?
$Structure = new Structure();

/* Получаем данные о текущем узле */
$structure_row = $Structure->GerStructureItem(CURRENT_STRUCTURE_ID);
$structure_parent_id = $structure_row['structure_parent_id'];

while ($structure_parent_id != 0)
{
$row_structure = $Structure->GetStructureItem($structure_parent_id);
$structure_parent_id = $row_structure['structure_parent_id'];
}

$Structure->ShowStructure(false, 'ЛевоеМеню', array('parent_id' => $row_structure['structure_id'], 'show_groups' => true),0);
?>

Код получился рабочий, да вот только в логах появляется ошибка  Undefined variable: row_structure, указывающая на строку
$Structure->ShowStructure(false, 'ЛевоеМеню', array('parent_id' => $row_structure['structure_id'], 'show_groups' => true),0);

Если row_structure сменить на structure_row (так будет правильно) - ошибка исчезает, но тогда в меню выводятся только группы инфосистемы.
Подскажите, пожалуйста, как мне быть?
Заранее спасибо!
www.dsaleks.ru - создание сайтов и интернет-магазинов
Модератор
#
Re: Меню
заменить при вызове метода в нижней строчке $row_structure['structure_id'] на $structure_parent_id
Авторизация