PDA

Просмотр полной версии : и снова вопрос по меню.


Илья
19.04.2006, 11:16
Есть сайт, с древовидной структурой страниц.
Уровень1
Уровень2
Уровень3
Уровень4
Каким образом сделать так, чтобы в меню пункты показывались в зависимости от того, на каком уровне мы находимся.
Если мы выбрали страницу на уровне 1, то в меню надо показать все страницы с уровня 2, для который выбранная страницы - родитель.
То же самое для 2 уровня, а для 3-го и 4-го нужно чтобы в меню показывались страницы из 2 уровня.
Немного путано получается, но так нужно сделать.

Вопрос в том, как определить на каком уровне мы в настоящий момент находимся и как сделать условие в коде в зависимости от жтого уровня.

В typo3_by_example.pdf видел что можно использовать if в конструкции вроде этой "subparts.LEFTNAV.special.value.data = field:uid", но не понял как это работает.
Сейчас код, показывает содержимое только 3 уровня меню:
subparts.LEFTNAV= HMENU
subparts.LEFTNAV.special = directory
subparts.LEFTNAV.entryLevel = 2
subparts.LEFTNAV.special.value.data = field:uid
subparts.LEFTNAV.1 = TMENU
subparts.LEFTNAV.1{
subst_elementUid = 1
wrap = <table border="0" width="150" cellspacing="0" cellpadding="0"> |</table>
NO{
subst_elementUid = 1
allWrap = <tr><td width="40" class="leftnav_f1"><img src="i/p/i{elementUid}.gif" border="0"></td><td width="110" class="leftnav1">|</td></tr> |*| <tr><td width="40" class="leftnav_f"><img src="i/p/i{elementUid}.gif" border="0"></td><td width="110" class="leftnav">|</td></tr> |*| <tr><td width="40" class="leftnav_f"> <img src="i/p/i{elementUid}.gif" border="0"></td><td width="110" class="leftnav2">|</td></tr> <tr><td class="leftnav_f2"><img src="i/c3-0.gif" border="0"></td><td class="leftnav2e" width="110"><img src="i/c3-1.gif" border="0"></td></tr>

}
ACT = 1
ACT{
subst_elementUid = 1
allWrap = <tr><td width="40" class="leftnav_f1"><img src="i/p/i{elementUid}.gif" border="0"></td><td width="110" class="leftnav1_act">|</td></tr> |*| <tr><td width="40" class="leftnav_f"><img src="i/p/i{elementUid}.gif" border="0"></td><td width="110" class="leftnav_act">|</td></tr> |*| <tr><td width="40" class="leftnav_f"> <img src="i/p/i{elementUid}.gif" border="0"></td><td width="110" class="leftnav2_act">|</td></tr> <tr><td class="leftnav_f2"><img src="i/c3-0.gif" border="0"></td><td class="leftnav2e" width="110"><img src="i/c3-1.gif" border="0"></td></tr>
}
}

marco
19.04.2006, 13:36
Вопрос в том, как определить на каком уровне мы в настоящий момент находимся и как сделать условие в коде в зависимости от жтого уровня.

Цитаты из доки:

NOTE: Don't set .entryLevel for a HMENU when using .special property! Also be aware that this selects pages for the first level in the menu.

This will generate a menu of all pages with pid = 35 and pid = 56.
20 = HMENU
20.special = directory
20.special.value = 35, 56
If .value is not set, the default pid is the current page.

Т.е. .entryLevel убрать, .special = directory оставить, а special.value не указывать.

Тогда меню будет строиться с текущего уровня.

subparts.LEFTNAV= HMENU
subparts.LEFTNAV.special = directory
subparts.LEFTNAV.1 = TMENU

Ну а чтоб было видно нижестоящие уровни их надо прописать subparts.LEFTNAV.2, subparts.LEFTNAV.3, ...

Илья
19.04.2006, 14:56
Спасибо за ответ.
Из какой доки цитата?

А в одном меню можно сделать выбор строить меню из вышестоящих пунктов или из нижестоящих?
Или обязательно придется делать
subparts.LEFTNAV.1
subparts.LEFTNAV.2
subparts.LEFTNAV.3

marco
19.04.2006, 19:02
Спасибо за ответ.
Из какой доки цитата?

TSREF. У меня он в виде хелпа tsref.chm

А в одном меню можно сделать выбор строить меню из вышестоящих пунктов или из нижестоящих?
Или обязательно придется делать
subparts.LEFTNAV.1
subparts.LEFTNAV.2
subparts.LEFTNAV.3

subparts.LEFTNAV.2 = TMENU
subparts.LEFTNAV.2 < subparts.LEFTNAV.1
subparts.LEFTNAV.3 = TMENU
subparts.LEFTNAV.3 < subparts.LEFTNAV.1

Илья
20.04.2006, 11:48
Спасибо, попробую.
А откуда можно скачать файлик tsref.chm?

Илья
20.04.2006, 12:04
Уже сам нашел.
Кому надо tsref_chm:
http://christian-trabold.de/fileadmin/ct/docs/tsref_chm.zip

Илья
20.04.2006, 14:55
Не догоняю смысла :(

Структура сайта примерно такая:

Уровень1
|-Уровень21
|-Уровень22
|-Уровень23
|-Уровень31
|-Уровень32
|-Уровень33
|-Уровень41
|-Уровень42
|-Уровень43


Есть меню, которое будет строиться с текущего уровня на один уровень ниже:
subparts.LEFTNAV= HMENU
subparts.LEFTNAV.special = directory
subparts.LEFTNAV.1 = TMENU
subparts.LEFTNAV.1{ }

Это замечательно работает! То есть если мы находимся в пункте Уровень1 в меню будут Уровень21,
Уровень22, Уровень23. Если в пункте Уровень33 в меню будут Уровень41, Уровень42, Уровень43.
Если в пункте Уровень43 меню не будет вообще.
Нужно как-то сделать, чтобы при нахождении в пункте Уровень33 в меню были пункты Уровень21, Уровень22, Уровень23.
То есть отображались вышестоящие на 1 уровень пункты меню.
И те же самые пункты Уровень21, Уровень22, Уровень23 при нахождении в пункте Уровень43.
То есть отображались вышестоящие на 2 уровня пункты меню.

В этой связи не понимаю как может помочь конструкция вида:
subparts.LEFTNAV.2 = TMENU
subparts.LEFTNAV.2 < subparts.LEFTNAV.1
subparts.LEFTNAV.3 = TMENU
subparts.LEFTNAV.3 < subparts.LEFTNAV.1

Хотя это видимо уровень FAQ'a, но тем не менее...

marco
21.04.2006, 16:04
Ну тогда надо сначала определить что считать уровнем :-)

Я полагал так:

Уровень1
|-Уровень21
|-Уровень22
|-Уровень23
|-|-Уровень31
|-|-Уровень32
|-|-Уровень33
|-|-|-Уровень41
|-|-|-Уровень42
|-|-|-Уровень43

ну и уровень FAQ'a конечно... ;-)

Илья
22.04.2006, 13:11
Ну тогда надо сначала определить что считать уровнем :-)

Я полагал так:

Уровень1
|-Уровень21
|-Уровень22
|-Уровень23
|-|-Уровень31
|-|-Уровень32
|-|-Уровень33
|-|-|-Уровень41
|-|-|-Уровень42
|-|-|-Уровень43

ну и уровень FAQ'a конечно... ;-)
Так оно и есть :))
Моя картинка уровней просто испортилась при вставке в в пост.

И все равно как при такой структуре реализовать следующее:
"Нужно как-то сделать, чтобы при нахождении в пункте Уровень33 в меню были пункты Уровень21, Уровень22, Уровень23.
То есть отображались вышестоящие на 1 уровень пункты меню.
И те же самые пункты Уровень21, Уровень22, Уровень23 при нахождении в пункте Уровень43. "???
То есть отображались вышестоящие на 2 уровня пункты меню.

marco
25.04.2006, 15:08
Тогда для пятиуровневого ;-) меню:
[treeLevel = 2]
subparts.LEFTNAV.entryLevel = 1
[treeLevel = 3]
subparts.LEFTNAV.entryLevel = 2
[treeLevel = 4]
subparts.LEFTNAV.entryLevel = 3
[treeLevel = 5]
subparts.LEFTNAV.entryLevel = 4
[else]
subparts.LEFTNAV.entryLevel = 0
[global]

Илья
25.04.2006, 16:59
Спасибо за ответ.
Я понял, что этот код показывает нужные пункты меню в зависимости от значения [treeLevel = ]
Это именно то, что нужно мне!
Но кривизна моих рук в этот раз не позволила вставить этот код в шаблон.

Сразу возник вопрос куда именно вставлять этот код?
Чувствую, что нужно внутрь меню :) а куда конкретно не понимаю :-(
При попытках вставки кода в любое место в меню перестают работать ссылки.
(Ссылка "О компании" вместо http://localhost/tp3/index.php?id=6 становится http://localhost/tp3/index.php/O_kompanii/6/0/)
Одним словом ссылки перестают работать!
Ткни пожалуйста куда именно вставить твой последний кусок кода в этот код (заранее благодарю):

subparts.LEFTNAV= HMENU
subparts.LEFTNAV.special = directory
subparts.LEFTNAV.1 = TMENU
subparts.LEFTNAV.1{
subst_elementUid = 1
wrap = <table class="table7" border="0" width="150" cellspacing="0" cellpadding="0"> |</table>
expAll=1
NO{
subst_elementUid = 1
allWrap = <tr><td width="40" class="leftnav_f1"><img src="i/p/i{elementUid}.gif" border="0"></td><td width="110" class="leftnav1">|</td></tr> |*| <tr><td width="40" class="leftnav_f"><img src="i/p/i{elementUid}.gif" border="0"></td><td width="110" class="leftnav">|</td></tr> |*| <tr><td width="40" class="leftnav_f"> <img src="i/p/i{elementUid}.gif" border="0"></td><td width="110" class="leftnav2">|</td></tr> <tr><td class="leftnav_f2"><img src="i/c3-0.gif" border="0"></td><td class="leftnav2e" width="110"><img src="i/c3-1.gif" border="0"></td></tr>
}
ACT = 1
ACT{
subst_elementUid = 1
allWrap = <tr><td width="40" class="leftnav_f1"><img src="i/p/i{elementUid}.gif" border="0"></td><td width="110" class="leftnav1_act">|</td></tr> |*| <tr><td width="40" class="leftnav_f"><img src="i/p/i{elementUid}.gif" border="0"></td><td width="110" class="leftnav_act">|</td></tr> |*| <tr><td width="40" class="leftnav_f"> <img src="i/p/i{elementUid}.gif" border="0"></td><td width="110" class="leftnav2_act">|</td></tr> <tr><td class="leftnav_f2"><img src="i/c3-0.gif" border="0"></td><td class="leftnav2e" width="110"><img src="i/c3-1.gif" border="0"></td></tr>
}
}

marco
04.05.2006, 19:42
Ткни пожалуйста куда именно вставить твой последний кусок кода в этот код
Не в этот код (не в код меню или subparts) вовсе.
Желательно где-нибудь в самом низу сетапа.
Оно просто в зависимости от значения [treeLevel = ] переопределяет значение entryLevel для меню.

Илья
05.05.2006, 12:29
ааа, вот в чем дело.
ладно, попробую так как ты говоришь,
еще раз спасибо!

Илья
05.05.2006, 14:10
А как можно сделать чтобы на 4 уровне отображалось то же самое меню, что и для 3 уровня?
То есть для пункта 33 в меню будет: 41,42,43 пункты.
для 41 в меню нужно оставить 41,42,43 пункты.
для 42 в меню нужно оставить 41,42,43 пункты.
для 43 в меню нужно оставить 41,42,43 пункты.

Уровень1
|-Уровень21
|-Уровень22
|-Уровень23
|-|-Уровень31
|-|-Уровень32
|-|-Уровень33
|-|-|-Уровень41
|-|-|-Уровень42
|-|-|-Уровень43

В Typo3_by_example написано, что: "Entrylevel определяет на каком уровне в корневой линии отображается меню."
Запутался откуда идет отсчет уровней, но не работает ни один из вариантов:

Такой вариант почему-то не проходит:
[treeLevel = 2]
subparts.LEFTNAV.entryLevel = 1
[treeLevel = 3]
subparts.LEFTNAV.entryLevel = 2
[treeLevel = 4]
subparts.LEFTNAV.entryLevel = 2
[treeLevel = 5]
subparts.LEFTNAV.entryLevel = 4
[else]
subparts.LEFTNAV.entryLevel = 0
[global]


И такой вариант тоже не работает:
[treeLevel = 2]
subparts.LEFTNAV.entryLevel = 1
[treeLevel = 3]
subparts.LEFTNAV.entryLevel = 2
[treeLevel = 4]
subparts.LEFTNAV.entryLevel = 3
[treeLevel = 5]
subparts.LEFTNAV.entryLevel = 3
[else]
subparts.LEFTNAV.entryLevel = 0
[global]

Илья
11.05.2006, 14:57
Вставил этот код в конец setup'а, но условие почему то не срабатывает...
[treeLevel = 2]
subparts.LEFTNAV.entryLevel = 1
[treeLevel = 3]
subparts.LEFTNAV.special.value.data = leveluid: -2
[treeLevel = 4]
subparts.LEFTNAV.entryLevel = 2
[treeLevel = 5]
subparts.LEFTNAV.entryLevel = 4
[else]
subparts.LEFTNAV.entryLevel = 0
[global]

Почему то subparts.LEFTNAV.special.value.data = leveluid: -2 срабатывает при нахождении в любом уровне меню, а должен вроде бы только в случае [treeLevel = 3]
В чем еще может быть дело?