Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   TypoScript практикум (http://forum.typo3.ru/forumdisplay.php?f=27)
-   -   HMENU как згенерировать title в подменю (http://forum.typo3.ru/showthread.php?t=9136)

lyova 11.01.2011 14:42

HMENU как згенерировать title в подменю
 
У меня есть меню такого вида
пункт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 меню.
То есть промлема решилась. Работает как требуется.
Но может можно это сделать как-то проще?


Часовой пояс GMT +4, время: 00:12.

Работает на vBulletin® версия 3.8.1.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot