Вывод подменю в отдельном месте макета сайта

#
Re: Re: Вывод подменю в отдельном месте макета сайта
HostCMS писал(а):
Сожалею, но я абсолютно не понял Ваш вопрос? Вам над подпунктами нужно вывести название родительского раздела?

Да. Как это сделать?
www.dsaleks.ru - создание сайтов и интернет-магазинов
#
Re: Вывод подменю в отдельном месте макета сайта
DS Aleks, перед вызовом метода, отображающего меню из подпунктов, добавьте код на определение родительского узла от текущего. Например:
/* Получаем данные о текущем узле */
$structure_row = $Structure->GerStructureItem(CURRENT_STRUCTURE_ID);
$structure_parent_id = $structure_row['structure_parent_id'];

$structure_row = $Structure->GerStructureItem($structure_parent_id);

print_r($structure_row['structure_menu_name']);
#
Re: Вывод подменю в отдельном месте макета сайта
Вот большое Вам человеческое спасибо!
Получилось! Отлично работает!
Правда, когда находимся в «родителе», его название не отображается, пустота.
www.dsaleks.ru - создание сайтов и интернет-магазинов
#
Re: Вывод подменю в отдельном месте макета сайта
Пожалуйста.
DS Aleks писал(а):
когда находимся в «родителе», его название не отображается
- а у этого "родителя" родительский раздел какой? Они в корне расположены? Если да, то вместо кода:
/* Получаем данные о текущем узле */
$structure_row = $Structure->GerStructureItem(CURRENT_STRUCTURE_ID);
$structure_parent_id = $structure_row['structure_parent_id'];

$structure_row = $Structure->GerStructureItem($structure_parent_id);

print_r($structure_row['structure_menu_name']);

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

if($structure_parent_id != 0)
{
$structure_row = $Structure->GerStructureItem($structure_parent_id);

print_r($structure_row['structure_menu_name']);
}
else
{
print_r($structure_row['structure_menu_name']);
}
#
Re: Вывод подменю в отдельном месте макета сайта
И снова БОЛЬШОЕ СПАСИБО!
Теперь все отлично! Теперь отображаются и в подменю и в самом "родителе".
www.dsaleks.ru - создание сайтов и интернет-магазинов
#
Re: Вывод подменю в отдельном месте макета сайта
DS Aleks, пожалуйста.
#
Re: Вывод подменю в отдельном месте макета сайта
Подскажите пожалуйста!

Есть основное меню вверхнее: п.1 - п.2 - п.3

Каждый раздел имеет свою структуру которую я вывожу в левом блоке макета кодом в первом сообщении.

Шаблон

<?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>
         <!-- Выбираем узлы структуры -->
         <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">
                  <a href="{$link}" class="active">
                  <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>



         </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="position() = round(count(/document/structure) div 2)"> -->
            <!--
            <xsl:if test="level = 0 and position() = round(count(/document//structure) div 2)">
               <xsl:text disable-output-escaping="yes">
                  &lt;/td&gt;
                  &lt;td valign="top" style="padding-left: 20px"&gt;
               </xsl:text>
            </xsl:if>
            -->

    <!-- Выбираем подузлы структуры -->
            <xsl:if test="count(structure[show=1]) &gt; 0">
                  <ol>
                  <!-- Выбираем узлы структуры -->
                  <xsl:apply-templates select="structure[show=1]"/>
                  </ol>
            </xsl:if>
         </li>
      </xsl:template>
   </xsl:stylesheet>



Зайдя в п.1 Получаю в левом блоке структуру вида:

п.1.1
п.1.1.1
п.1.1.2

п.1.2
п.1.2.1
п.1.2.2

п.1.3
п.1.3.1
п.1.3.2


Вопрос как получить ситуацию когда зайдя в п.1 cлева мы увидим меню только первого уровня:

п.1.1

п.1.2

п.1.3

А зайдя в одно из этих подменю получу раскрытие только активного подменю то есть например зашли в п.1.1:


п.1.1
п.1.1.1
п.1.1.2

п.1.2

п.1.3

Поиск на форуме меня убил - только запутался. Решил попросить помощи в этом же топике которым воспользовался.
Cпасибо
ку
Модератор
#
Re: Вывод подменю в отдельном месте макета сайта
Уже обсуждалось, см. конец страницы: http://www.hostcms.ru/forums/17/1622/page-3/
#
Re: Вывод подменю в отдельном месте макета сайта
cпасибо! иногда в поиске путаешься, тк много всего навалено в решениях пользователей и их просьб.
ку
Модератор
#
Re: Вывод подменю в отдельном месте макета сайта
compaq,
Пожалуйста.
Авторизация