Регистрация
Вход через соцсети
Восстановление пароля

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

Новый топик
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
Описание проекта