PDA

Просмотр полной версии : HMENU как згенерировать title в подменю


lyova
11.01.2011, 14:42
У меня есть меню такого вида
пункт1
1.1
1.2
....
1.5
пункт2
2.1
2.1.1
2.1.2
....
2.1.5
2.2
2.2.1
2.2.2
....
2.2.5
2.3
2.4
2.5
пункт3
...
пункт5

то есть все пункты(кроме второго, который имеет 3 уровня) имеют 2 уровня. И все 2 уровня являются раскрыты.
Я описываю это меню так

# Menu 1 cObject
lib.left_menu = HMENU
# First level menu-object, textual
lib.left_menu.1 = TMENU
lib.left_menu.1 {
maxItems = 2
expAll = 1
# Normal state properties
NO.allWrap = <tr><td bgcolor="#deddfb" height="20"><div class="left_menu_1"> | </div></td></tr>
NO.stdWrap.htmlSpecialChars = 1
NO.doNotLinkIt = 1
# Enable active state and set properties:
ACT = 1
ACT.doNotLinkIt = 1
ACT.stdWrap.htmlSpecialChars = 1
ACT.allWrap = <tr><td bgcolor="#deddfb" height="20"><div class="left_menu_1"> | </div></td></tr>
ACT.doNotLinkIt = 1
}

// Second level of left-menu
lib.left_menu.2 = TMENU
lib.left_menu.2 {
wrap = <tr><td height="10'"></td></tr> | <tr><td height="10'"></td></tr>
NO.allWrap = <tr><td class="white"><div class="left_menu_1_2"> | </div></td></tr>
NO.stdWrap.htmlSpecialChars = 1
ACT=1
ACT.stdWrap.htmlSpecialChars = 1
ACT.allWrap = <tr><td class="white"><div class="left_menu_1_2_act"> | </div></td></tr>
}



теперь когда я захожу на любой из подпутктов пункта 2, то если в него есть пункты 3 уровня, то сразу после окончания вывода пункта 2
должен следовать вывод пунктов третьего уровня, то есть когда я заходжу в 2.1 то меню должно выглядеть так

пункт1
1.1
1.2
....
1.5
пункт2
2.1
2.2
....
2.5
3 уровень пункта 2.1
2.1.1
2.1.2
2.1.3
2.1.4
2.1.5
пункт3
пункт4
пункт5

То есть оно по внешнему виду выглядит как обичный пункт 2 уровня.
Для этого я выводжу сначала только меню из двух пунктов, потом
выводжу подменю 3 уровня и тогда оставшуюся часть меню

подменю 3 уровня

lib.left_menu_kaf = HMENU
lib.left_menu_kaf.entryLevel = 2
// Second level of left-menu
lib.left_menu_kaf.1 = TMENU
lib.left_menu_kaf.1 {
wrap = <tr><td bgcolor="#deddfb" height="20"><div class="left_menu_1">3 уровень пункта {leveltitle:-2}</div></td></tr><tr><td height="10'"></td></tr> | <tr><td height="10'"></td></tr>
NO.allWrap = <tr><td class="white"><div class="left_menu_1_2"> | </div></td></tr>
NO.stdWrap.htmlSpecialChars = 1
ACT=1
ACT.stdWrap.htmlSpecialChars = 1
ACT.allWrap = <tr><td class="white"><div class="left_menu_1_2_act"> | </div></td></tr>
}


То есть оно работает так как мне нужно.
Единственное что мне так и не удаётся сделать это правильно згенерировать название "3 уровень пункта 2.1" или "3 уровень пункта 2.2". то есть в зависимости от того какой подпункт я вывожу, соответственно такое название должно генерироваться в строчке

wrap = <tr><td bgcolor="#deddfb" height="20"><div class="left_menu_1">3 уровень пункта {leveltitle:-2}</div></td></tr><tr><td height="10'"></td></tr> | <tr><td height="10'"></td></tr>
но оно не работает. Как мне вставить сюда допустим {leveltitle:-2}.

lyova
12.01.2011, 14:30
Решил проблему другим способом.
Для этого разбил меню
3 уровень пункта 2.1
2.1.1
2.1.2
2.1.3
2.1.4
2.1.5

на два
меню шапки ("3 уровень пункта 2.1")
и собственно меню самих пунктов

меню шапки фактически то же самое что и меню самих пунктов, но в нём я вывожу требуемый мне текст с названием "3 уровень пункта 2.1", а само название пункта нет (NO.doNotShowLink=1), и ограничиваю вывод только одного пункта (maxItems=1)


# Menu (появляется только тогда когда заходимо на подпункты пункта 2)
#выводит "пункт 2 ..."
lib.left_menu_kaf_tit = HMENU
lib.left_menu_kaf_tit.entryLevel = 2
// Second level of left-menu
lib.left_menu_kaf_tit.1 = TMENU
lib.left_menu_kaf_tit.1 {
maxItems=1
wrap = <tr><td bgcolor="#deddfb" height="20"> <div class="left_menu_1">пункт 2:&nbsp; | </div></td></tr>
NO.allWrap.dataWrap = {leveltitle:-2}
#чтобы не выводило название пункта 3 уровня
NO.doNotShowLink=1
NO.stdWrap.htmlSpecialChars = 1
}


# Menu (появляется только тогда когда заходимо на подпункты пункта 2)
#пункты третьего уровня
lib.left_menu_kaf = HMENU
lib.left_menu_kaf.entryLevel = 2
// Second level of left-menu
lib.left_menu_kaf.1 = TMENU
lib.left_menu_kaf.1 {
wrap = <tr><td height="10'"></td></tr> | <tr><td height="10'"></td></tr>
NO.allWrap = <tr><td class="white"><div class="left_menu_1_2"> | </div></td></tr>
NO.stdWrap.htmlSpecialChars = 1
ACT=1
ACT.stdWrap.htmlSpecialChars = 1
ACT.allWrap = <tr><td class="white"><div class="left_menu_1_2_act"> | </div></td></tr>
}



В итоге у меня меню состоит как бы из 4 меню.
То есть промлема решилась. Работает как требуется.
Но может можно это сделать как-то проще?