Регистрация

Введите код на картинке:
Регистрируясь вы подтверждаете свое согласие с соглашением об использовании персональных данных.
Восстановление пароля

Шаблон вівода многоуровневого меню

12.05.2010, 17:43
Гость
Гость

Есть такой шаблон вывода навигации.

Код:
$browse_sub[3][prefix] = "<ul><li>";
$browse_sub[3][suffix] = "</li></ul></li>";
$browse_sub[3][active] = "<li><a href=%URL>%NAME</a></li>";
$browse_sub[3][active_link] = "<li><a href=%URL>%NAME</a>";
$browse_sub[3][unactive] = "<li><a href=%URL>%NAME</a>";
$browse_sub[3][divider] = "";

$browse_sub[2][prefix] = "";global $browse_sub;$result.="<ul><li>";
$browse_sub[2][suffix] = "</li></ul></li>";
$browse_sub[2][active] = "<li><a href=%URL>%NAME</a>.s_browse_level(3,$browse_sub[3])</li>";
$browse_sub[2][active_link] = "<li><a href=%URL>%NAME</a>".s_browse_sub($data[$i][Subdivision_ID],$browse_sub[3])."";
$browse_sub[2][unactive] = "<li><a href=%URL>%NAME</a>".s_browse_sub($data[$i][Subdivision_ID],$browse_sub[3])."";
$browse_sub[2][divider] = "";

$browse_sub[1][prefix] = "";global $browse_sub;$result.="<ul><li>";
$browse_sub[1][suffix] = "</li></ul></li>";
$browse_sub[1][active] = "<li><a href=%URL>%NAME</a>.s_browse_level(2,$browse_sub[2])</li>";
$browse_sub[1][active_link] = "<li><a href=%URL>%NAME</a>".s_browse_sub($data[$i][Subdivision_ID],$browse_sub[2])."";
$browse_sub[1][unactive] = "<li><a href=%URL>%NAME</a>".s_browse_sub($data[$i][Subdivision_ID],$browse_sub[2])."";
$browse_sub[1][divider] = "";

$browse_sub[0][prefix] = "";global $browse_sub;$result.="<ul id='tree'>";
$browse_sub[0][suffix] = "</ul>";
$browse_sub[0][active] = "<li><a href=%URL>%NAME</a>".s_browse_level(1,$browse_sub[1]);
$browse_sub[0][active_link] = "<li><a href=%URL>%NAME</a>".s_browse_sub($data[$i][Subdivision_ID],$browse_sub[1])."";
$browse_sub[0][unactive] = "<li><a href=%URL>%NAME</a>".s_browse_sub($data[$i][Subdivision_ID],$browse_sub[1])."";
$browse_sub[0][divider] = "";


С помощью плагина jquery-treeview хочу сделать многоуровневое меню(при нажатии на меню верхнего уровня
открываются все пункты нижнего уровня)

Все работает до третего уровня, когда нажимаю на пункт третьего уровня все сворачивается до первого уровня а на
против второго уровня пишется "Название.s_browse_level(2,Array)"


Как правильно реализовывать многоуровневые меню, при этом изначально не зная, конечное количество уровней?
Если кто может подскажите в чём я тут закрутил?

12.05.2010, 21:05
malich
Андрей Малков

Зарегистрирован:
2005-08-09
Сообщений: 522

Так вы откройте исходный код страницы и посмотрите какой html код генерирует неткэт.

по сути в вашем примере проблема скорее всего с экранированием. на первом уровне нужно экранировать " на втором \" ...
13.05.2010, 13:03
Гость
Гость

html подправил немного, теперь проблема сместилась на уровень выще, подскажите, а где почитать про экранирование?
Сейчас html корректный
13.05.2010, 13:07
Гость
Гость

А ещё проблема в этом такого рода в одном из пунктов вылазит ошибка уже на третем уровне как я описал, а
в одно из пунктов при нажатии на меню второго уровн вот така
netcatrequires_browse.inc.php(326) : eval()'d code on line 1
13.05.2010, 16:04
malich
Андрей Малков

Зарегистрирован:
2005-08-09
Сообщений: 522

у вас проблема с экранированием. прочитать про нее вы наверное нигде не сможете, только экспериментально. Суть в том что у вас функция выполняются внутри другой функции, экранироваться должны они примерно так:

Код:
".function(
".function(
\".function(
\\\".function().\\\"
).\"
)."
)."


По себе знаю, что разбираться с этим можно довольно долго.

поэтому в вашем случае я бы посоветовал сделать меню на одном шаблоне. Посмотрите как сделана карта сайта, там один шаблон который вызывает сам себя требуемое количество раз

Для того что бы вывести меню в разном оформлении для разных уровней вложенности вы можете на основе переменной $sub_level_count написать свою функцию для выяснения уровня вложенности:

в /netcat/modules/default/function.inc.php пишем
Код:
function my_level_count($mysub)
{
$r = $nc_core->subdivision->get_level_count($mysub);
return $r;
}


затем пишем примерно следующий шаблон вывода навигации за основу возьмите вывод карты сайта
Код:
$browse[unactive] = "
".('my_level_count($data[$i][Subdivision_ID])'==0?"шаблон вывода первого уровня": NULL )."

".('my_level_count($data[$i][Subdivision_ID])'==1?"шаблон вывода второго уровня": NULL )."

".('my_level_count($data[$i][Subdivision_ID])'==2?"шаблон вывода третьего уровня": NULL )."
".s_browse_sub($data[$i][Subdivision_ID],$browse_template)."
";

как то вот так, таким образом вы решите проблемы с экранированием
14.05.2010, 16:23
Гость
Гость

Спасибо всё получилось
198 196 2010-05-14 16:23:18 7920
Описание проекта