Довольно часто сталкиваешься с проблемой создания многоуровневого списка на подобие офисных программ (MS Office, OpenOffice).
Например, такой список стандартным образом в HTML организовать не получится.
1. Раздел
2. Раздел
2.1. ПодРаздел
2.2. ПодРаздел
3. Раздел
4. Раздел
4.1. ПодРаздел
4.2. ПодРаздел
Поэтому приходится выдумывать всевозможные методы построения многоуровневого меню или списка с помощью JavaScript или Php скриптов.
Ниже представлен вариант реализации многоуровневого меню с помощью TypoScript для TYPO3. Как оно работает можно посмотреть в портфолио здесь.
Даный код TypoScript использует LOAD_REGISTER для счетчика. Для каждого уровня меню нужно регистрировать свой счетчик.
map = HMENU
map{
wrap = <ol type="none">|</ol>
entryLevel = 1
1 = TMENU
1 {
collapse = 1
noBlur = 1
NO{
stdWrap.cObject = COA
stdWrap.cObject {
10 = LOAD_REGISTER
10{
Counter1.cObject = TEXT
Counter1.cObject.data = register:Counter1
Counter1.cObject.wrap = |+1
Counter1.prioriCalc = intval
}
20 = TEXT
20.field = title // subtitle
}
linkWrap = |
ATagTitle.field = title // subtitle
allStdWrap.dataWrap = <li>{register:Counter1}. |</li>
}
CUR = 1
CUR < .NO
CUR.allStdWrap.dataWrap = <li class="act">{register:Counter1}. |</li>
CUR.doNotLinkIt = 1
}
2 = TMENU
2 {
wrap = <ol type="none">|</ol>
noBlur = 1
NO{
stdWrap.cObject = COA
stdWrap.cObject {
10 = LOAD_REGISTER
10{
Counter2.cObject = TEXT
Counter2.cObject.data = register:Counter2
Counter2.cObject.wrap = |+1
Counter2.prioriCalc = intval
}
20 = TEXT
20.field = title // subtitle
}
linkWrap = |
ATagTitle.field = title // subtitle
allStdWrap.dataWrap = <li>{register:Counter1}.{register:Counter2}. |</li>
}
CUR = 1
CUR < .NO
CUR.allStdWrap.dataWrap = <li class="act">{register:Counter1}.{register:Counter2}. |</li>
CUR.doNotLinkIt = 1
}
}
map{
wrap = <ol type="none">|</ol>
entryLevel = 1
1 = TMENU
1 {
collapse = 1
noBlur = 1
NO{
stdWrap.cObject = COA
stdWrap.cObject {
10 = LOAD_REGISTER
10{
Counter1.cObject = TEXT
Counter1.cObject.data = register:Counter1
Counter1.cObject.wrap = |+1
Counter1.prioriCalc = intval
}
20 = TEXT
20.field = title // subtitle
}
linkWrap = |
ATagTitle.field = title // subtitle
allStdWrap.dataWrap = <li>{register:Counter1}. |</li>
}
CUR = 1
CUR < .NO
CUR.allStdWrap.dataWrap = <li class="act">{register:Counter1}. |</li>
CUR.doNotLinkIt = 1
}
2 = TMENU
2 {
wrap = <ol type="none">|</ol>
noBlur = 1
NO{
stdWrap.cObject = COA
stdWrap.cObject {
10 = LOAD_REGISTER
10{
Counter2.cObject = TEXT
Counter2.cObject.data = register:Counter2
Counter2.cObject.wrap = |+1
Counter2.prioriCalc = intval
}
20 = TEXT
20.field = title // subtitle
}
linkWrap = |
ATagTitle.field = title // subtitle
allStdWrap.dataWrap = <li>{register:Counter1}.{register:Counter2}. |</li>
}
CUR = 1
CUR < .NO
CUR.allStdWrap.dataWrap = <li class="act">{register:Counter1}.{register:Counter2}. |</li>
CUR.doNotLinkIt = 1
}
}
