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

Модератор
#
Re: Вывод подменю в отдельном месте макета сайта
namez писал(а):
И все же? Или подскажите хотябы как не выводить родителя когда нет детей, задача выводить структуру раздела тогда когда она есть, родителя добавили но он выводится теперь в каждом разделе чего не нужно делать.

я так и не понял, Вы выводите подпункты с родительским разделом? Тогда почему бы на XSL не проверить, что если count(structure) != 0, то только тогда выводить и сам узел и его потомков.
#
Re: Вывод подменю в отдельном месте макета сайта
Так дело в том что я и спрашивал в топике - как вывести родителя в xsl(первое сообщение на странице http://www.hostcms.ru/forums/22/527/page-3/), изначально Наталья привела пример на php. Окей, тогда как на php сделать эту проверку? 8)

Если на xls подскажите все-таки как этого родителя там получить...
ку
#
Re: Вывод подменю в отдельном месте макета сайта
Наталья помогите пожалуйста
ку
Модератор
#
Re: Вывод подменю в отдельном месте макета сайта
namez,
Информация у Натальи, как она сможет - обязательно ответит.
#
Re: Вывод подменю в отдельном месте макета сайта
namez писал(а):
как вывести родителя в xsl
- к сожалению, при ограничении узлов по родительскому разделу передать в XML информацию о нем самом никак не получится.
namez писал(а):
как не выводить родителя когда нет детей
- необходимо при выводе ссылки на раздел сайта добавить проверку на количество его подузлов. Например, вместо:
<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 test="count(structure[show=1]) &gt; 0"><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>
#
Re: Вывод подменю в отдельном месте макета сайта
Наталья вы не поняли 8(

Вы здесь привели пример получения родителя на PHP

natalya писал(а):
Пожалуйста.
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']);
}


Так я пол топика пытаюсь тут получить помощи как этого родителя не выводить если нет у него детей. на PHP! Так как я его вывел на PHP

На XSL вы сказали нельзя вывести родителя и при этом же отвечаете на мой вопрос как его не выводить...


Помогите пожалуйста!
ку
#
Re: Вывод подменю в отдельном месте макета сайта
Добрый день. Я постараюсь вопрос задать еще раз.

Мы выводим в отдельном месте макета Подменю

<!-- Дополнительное меню -->
<?
$Structure = new Structure();
$row_structure = $Structure->GetStructureItem(CURRENT_STRUCTURE_ID);
$structure_parent_id = $row_structure['structure_parent_id'];
$param['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'];
}
$param['parent_id'] = $row_structure['structure_id'];
$Structure->ShowStructure(false,'ДополнМеню',$param);
?>


Допустим у нас есть данная структура:

1 Компания (/company)
  1.1 О нас (/company/about)
  1.2 Контакты (/company/contacts)

2 Отзывы

3 Ссылки


Заходим в раздел "Компания" через основное меню и получаем в отдельном месте макета подменю:

1 О нас (/company/about)
2 Контакты (/company/contacts)

Ок

Но нужен немного другой рабочий вывод а именно с выводом названия(ссылки) родителя, ниже пример состояния Подменю когда мы только что перешли через основное меню в раздел "Компания"

1 Компания (/company, текущий раздел)
2 О нас (/company/about)
3 Контакты (/company/contacts)

Ну и оно должно работать, перейдя например в "О нас"

1 Компания (/company)
2 О нас (/company/about, текущий раздел)
3 Контакты (/company/contacts)


В общем родителя как добавить?


Вот текущий обычный шаблон



<?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="no" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<!-- ДополнМеню -->
<xsl:template match="/document">
<xsl:if test="count(structure[show=1]) &gt; 0">
<ul class="reset submenu">
<!-- Выбираем узлы структуры -->
<xsl:apply-templates select="structure[show=1]"/>
</ul>
</xsl:if>
</xsl:template>
<xsl:template match="structure">
<!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
<xsl:variable name="current_structure_id" select="current_structure_id"/>
<li>
<!--
Если заполнено доп. свойство добавляем к li это свойство в виде класса.
Выделяем текущую страницу добавлением к li класса active, если это текущая страница, либо у нее есть ребенок с атрибутом id, равным текущей. Если это первый элемент добавляем класс first.
-->
<xsl:if test="propertys/property[@xml_name = 'css']/value or current_structure_id = @id or count(.//structure[@id=$current_structure_id]) = 1 or position() = 1">
<xsl:attribute name="class">
<xsl:if test="propertys/property[@xml_name = 'css']/value != ''">
<xsl:value-of select="propertys/property[@name = 'css']/value"/>
</xsl:if>
<xsl:if test="current_structure_id = @id or count(.//structure[@id=$current_structure_id]) = 1">
<xsl:text> active</xsl:text>
</xsl:if>
<xsl:if test="position() = 1">
<xsl:text> first</xsl:text>
</xsl:if>
</xsl:attribute>
</xsl:if>
<!-- Показывать ссылку, или нет -->
<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>
<a href="{$link}" title="{name}">
<xsl:value-of disable-output-escaping="yes" select="name"/>
</a>
</xsl:if>
<!-- Если не показывать ссылку - выводим просто имя ссылки -->
<xsl:if test="show_link=0">
<xsl:value-of disable-output-escaping="yes" select="name"/>
</xsl:if>
</li>
</xsl:template>
</xsl:stylesheet>

ку
#
Re: Вывод подменю в отдельном месте макета сайта
Вопрос решил!
ку
#
Re: Вывод подменю в отдельном месте макета сайта
compaq писал(а):
Вопрос решил!


поделитесь пожулуйста.
iq-site
#
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'];
}
/* Получаем данные о текущем узле */
$external_propertys = $Structure->GerStructureItem(CURRENT_STRUCTURE_ID);
$structure_parent_id = $external_propertys['structure_parent_id'];
if($structure_parent_id != 0)
{
$external_propertys = $Structure->GerStructureItem($structure_parent_id);
}
$Structure->ShowStructure(false, 'ДополнМеню', array('parent_id' => $row_structure['structure_id']), $external_propertys);
?>



В xml теперь есть родитель (как в корне так и в детях)


natalya писал(а):
 — к сожалению, при ограничении узлов по родительскому разделу передать в XML информацию о нем самом никак не получится.


Вот тогда очень расстроился, ведь все-таки можно.
В моем случае родитель в xml попадает не в общем списке дерева структуры а перед, но это не мешает его обработать и вставить в исходный html нужным образом.
ку
Авторизация