Проблема со значением, возвращаемым методом Structure::ShowStructure.

#
Проблема со значением, возвращаемым методом Structure::ShowStructure.
Здравствуйте!

В справке по HostCMS API для метода Structure::ShowStructure написано, что метод возвращает истину при успешном отображении меню.

Вопрос: что значит неуспешное отображение меню, и что в таком случае возвращает метод?

Проблема в том, что метод, независимо от того было отображено меню или нет, возвращает почему-то всегда 1.
Модератор
#
Re: Проблема со значением, возвращаемым методом Structure::ShowStructure.
если меню было отображено, метод возвращает 1. Что Вы считаете фактом неудачного отображения меню?
#
Re: Проблема со значением, возвращаемым методом Structure::ShowStructure.
Фактом неудачного отображения я считаю, если меню не было отображено.

Более конкретно о моем случаи. У меня трёхуровневая структура меню. Первые два уровня выводятся в верхнем меню: первый уровень виден, второй уровень - выпадает. Третий уровень отображается слева.

С отображением всех уровней меню проблем нет. Но в моём случае при клике на подпункт меню второго уровня (который выпадает) пользователь попадает сразу на туже страницу, как если бы он кликнул на первый подпункт меню третьего уровня (которое отображается слева). Получается, что две ссылки из двух уровней меню ссылаются на одну и туже страницу.

Дальше. Реализация вывода левого меню на странице в макете должна быть разная в зависимости от того, по какой ссылки мы туда попали: со второго уровня меню или с третьего.

Так как это один макет, то реализовано у меня это следующим образом. В коде прописан вывод сразу двумя способами. Второй способ выводится в операторе IF в случае, если первый вывод был неудачным (т.е. первый ничего не выводит, меню не отображается). Он действительно ничего не выводит, но всёже возвращает 1, и, соответственно, второй вывод тоже не срабатывает, и, таким образом, не выводится ничего.
#
Re: Проблема со значением, возвращаемым методом Structure::ShowStructure.
Ещё поясню. Есть элемент. Для вывода меню он заявлен как родитель, т.е. в меню должны выводится его дочерние элементы. Но у него нет дочерних элементов, соответственно в меню нечего отображаться и, оно не отображается. На странице пусто, элемент отображения отсутствует, но метод вернул 1.
Модератор
#
Re: Проблема со значением, возвращаемым методом Structure::ShowStructure.
kisselev,
Задание отображения задается в XSL-шаблоне. Метод не знает, что пользователь написал в XSL-шаблоне и было ли визуально отображено меню.
kisselev писал(а):
Так как это один макет, то реализовано у меня это следующим образом. В коде прописан вывод сразу двумя способами. Второй способ выводится в операторе IF в случае, если первый вывод был неудачным (т.е. первый ничего не выводит, меню не отображается). Он действительно ничего не выводит, но всёже возвращает 1, и, соответственно, второй вывод тоже не срабатывает, и, таким образом, не выводится ничего.

Мне кажется это не совсем корректно. По ID определите уровень вложенности текущего узла структуры и по этому уровню уже делайте соответствующие действия.
#
Re: Проблема со значением, возвращаемым методом Structure::ShowStructure.
HostCMS писал(а):
По ID определите уровень вложенности текущего узла структуры


Подскажите, пожалуйста, как это делается?
Модератор
#
Re: Проблема со значением, возвращаемым методом Structure::ShowStructure.
см. http://www.hostcms.ru/forums/17/1986/

Аналогично в цикле можете получить уровень и в зависимости от него реализовывать логику.
<?php
$Structure = new Structure();

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

$level = 0;

/* В цикле передвигаем вверх, начиная от текущего элемента, до получения элемента, у которого родитель - корень */
while ($structure_parent_id != 0)
{
   $level++;
   $structure_row = $Structure->GetStructureItem($structure_parent_id);
   $structure_parent_id = $structure_row['structure_parent_id'];
}

echo "<br />Уровень {$level}";

?>


Написал без проверки, возможны опечатки.
Авторизация