PDA

Просмотр полной версии : сложная структура меню


GAZok
29.07.2009, 15:49
...может не для всех она сложная, но помощь нужна мне в следующем:

При помощи вот этого скрипта:
temp.topmenu_2 = HMENU
temp.topmenu_2.entryLevel = 2
temp.topmenu_2.1 = TMENU
temp.topmenu_2.1 {

NO.allWrap = <div class="m_top"> | </div>

ACT = 1
ACT.ATagParams = id="active"
ACT.allWrap = <div class="m_top"> | </div>

ACTIFSUB = 1
ACTIFSUB.ATagParams = id="active"
ACTIFSUB.allWrap = <div class="m_top"> |
}

temp.topmenu_2.2 = TMENU
temp.topmenu_2.2 {
wrap = <div class="m_down"> | </div></div>

NO.allWrap = <div class="m_down_item"> | </div>

ACT = 1
ACT.ATagParams = id="active"
ACT.allWrap = <div class="m_down_item"> | </div>

ACTIFSUB = 1
ACTIFSUB.ATagParams = id="active"
ACTIFSUB.allWrap = <div class="m_down_item"> |
}

temp.topmenu_2.3 = TMENU
temp.topmenu_2.3 {
wrap = <div class="m_down"> | </div></div>

NO.allWrap = <div class="m_down_item"> | </div>

ACT = 1
ACT.ATagParams = id="active"
ACT.allWrap = <div class="m_down_item"> | </div>
}

Мне удалось создать следующий ХТМЛ код:
<div class="submenu" id="topmenu_2">
<div class="m_top"><a href="index.php?id=1">page 1</a></div>
<div class="m_top"><a href="index.php?id=2" id="active">page 2</a>
<div class="m_down">

<div class="m_down_item"><a href="index.php?id=3">sub-page 3</a></div>
<div class="m_down_item"><a href="index.php?id=4">sub-page 4</a></div>
</div>
</div>
</div>

В нем мне необходимо ссылку на активную страницу поместить в другое место. А именно:
<div class="submenu" id="topmenu_2">
<div class="m_top"><a href="index.php?id=1">page 1</a></div>
<div class="m_top">
<div class="m_down">

<div class="m_down_item"><a href="index.php?id=3">sub-page 3</a></div>
<div class="m_down_item"><a href="index.php?id=4">sub-page 4</a></div>
</div><a href="index.php?id=2" id="active">page 2</a>
</div>
</div>

Как изменить ТупоСкрипт для этого, не знаю. Приходила мысль, может можно в дочернем уровне меню, как то указать ссылку на отцовский пункт меню, а в самом отцовском обработчике закомментировать активний пункт. То есть ХТМЛ код получился бы такой:
<div class="submenu" id="topmenu_2">
<div class="m_top"><a href="index.php?id=1">page 1</a></div>
<div class="m_top"><!-- <a href="index.php?id=2" id="active">page 2</a> -->
<div class="m_down">

<div class="m_down_item"><a href="index.php?id=3">sub-page 3</a></div>
<div class="m_down_item"><a href="index.php?id=4">sub-page 4</a></div>
</div><a href="index.php?id=2" id="active">page 2</a>
</div>
</div>
Это возможно?

GAZok
29.07.2009, 17:30
Вопрос почти решен. Необходимая структура генерируется, но как вписать название отцовской страницы?
temp.topmenu_2 = HMENU
temp.topmenu_2.entryLevel = 2
temp.topmenu_2.1 = TMENU
temp.topmenu_2.1 {

NO.allWrap = <div class="m_top"> | </div>

ACT = 1
ACT.ATagParams = id="active"
ACT.allWrap = <div class="m_top"> | </div>

ACTIFSUB = 1
#ACTIFSUB.ATagParams = id="active"
#ACTIFSUB.doNotLinkIt = 1
ACTIFSUB.allWrap = <div class="m_top"><!-- | -->
}

temp.topmenu_2.2 = TMENU
temp.topmenu_2.2 {
wrap = <div class="m_down"> | </div>

NO.allWrap = <div class="m_down_item"> | </div> |*| <div class="m_down_item"> | </div> |*| <div class="m_down_item"> | </div></div><a href="index.php?id={field:pid}" id="active">[название отцовской страницы]</a>
NO.allWrap.insertData = 1

ACT = 1
ACT.ATagParams = id="active"
ACT.allWrap = <div class="m_down_item"> | </div> |*| <div class="m_down_item"> | </div> |*| <div class="m_down_item"> | </div></div><a href="index.php?id={field:pid}" id="active">[название отцовской страницы]</a>
NO.allWrap.insertData = 1

ACTIFSUB = 1
#ACTIFSUB.ATagParams = id="active"
#ACTIFSUB.doNotLinkIt = 1
ACTIFSUB.allWrap = <div class="m_down_item"><!-- | -->
}

temp.topmenu_2.3 = TMENU
temp.topmenu_2.3 {
wrap = <div class="m_down"> | </div>

NO.allWrap = <div class="m_down_item"> | </div> |*| <div class="m_down_item"> | </div> |*| <div class="m_down_item"> | </div></div><a href="index.php?id={field:pid}" id="active">[название отцовской страницы]</a>
NO.allWrap.insertData = 1

ACT = 1
ACT.ATagParams = id="active"
ACT.allWrap = <div class="m_down_item"> | </div> |*| <div class="m_down_item"> | </div> |*| <div class="m_down_item"> | </div></div><a href="index.php?id={field:pid}" id="active">[название отцовской страницы]</a>
NO.allWrap.insertData = 1
}

{field:pid} - использую в качестве ID отцовской страницы, а название???

void
29.07.2009, 21:15
{data:leveltitle:-1} то ли просто {leveltitle:-1}

GAZok
29.07.2009, 21:25
{leveltitle:-1}
пробовал, но по ходу открытия 2, 3, 4-го уровней меню это значений показывает название отцовской страницы от старицы на которой пользователь находится на данный момент. А нужно чтобы leveltitle:-1 привязывался не к поточной странице, а к пункта меню к которому он задействован. Правда может я не правильно что написал, но...

У меня есть одна идея, но никак не могу довести ее до ума:

before.cObject=LOAD_REGISTER
before.cObject{

mainMenuNumber.cObject=TEXT
mainMenuNumber.cObject{
value={DB : pages:27:title}
insertData=1
}
}


При использовании этого кода у меня все работает нормально, но как вы видите ID страницы хардкодед. Пытался как то подставить (вместо 27) {field:pid} но безрезультатно. Получался такой код:
value={DB : pages:{field:pid}:title}

Может как то можно это обойти чтобы использовать pid?

GAZok
04.08.2009, 12:27
питаюсь вытащить заголовок страницы при помощи даного кода:
mainMenuNumber = CONTENT
mainMenuNumber{
table = pages
select{
languageField=sys_language_uid
max=10
selectFields=uid,title
where=uid=27
}

cObject= COA
cObject{
wrap = |
10 = TEXT
10.field = uid
}
}

Но он не работает корректно. В целях тестирования вместо title возвращаю uid. Не смотря на то, что задано конкретное условие (where=uid=27) в результате получаю 34. Такое впечатление что условие не срабатывает. Видите здесь явные ошибки?

GAZok
04.08.2009, 14:31
Наверное нужно уточнить что данная часть кода используется в меню. Как я успел заметить єтот код работает корректно вне меню. Полностью не рабочий код выглядит так:
temp.topmenu_2.2 = TMENU
temp.topmenu_2.2 {
wrap = <div class="m_down"> | </div>

NO{

before.cObject=LOAD_REGISTER
before.cObject{

mainMenuNumber = TEXT
mainMenuNumber{
table = pages
select{
languageField=sys_language_uid
max=10
selectFields=uid,title
where=uid=27
}

cObject= COA
cObject{
wrap = |
10 = TEXT
10.field = uid
}
}
}

allWrap = <div class="m_down_item"> | </div> |*| <div class="m_down_item"> | </div> |*| <div class="m_down_item"> | </div></div><a href="index.php?id={field:pid}" id="active">{register:mainMenuNumber}</a>
allWrap.insertData = 1
}

ACT = 1
ACT.ATagParams = id="active"
ACT.allWrap = <div class="m_down_item"> | </div> |*| <div class="m_down_item"> | </div> |*| <div class="m_down_item"> | </div></div><a href="index.php?id={field:pid}" id="active">={leveltitle:-1}=</a>
NO.allWrap.insertData = 1

ACTIFSUB = 1
ACTIFSUB.allWrap = <div class="m_down_item"><!-- | -->
}

GAZok
04.08.2009, 18:57
Проблему решил таким вот хитрым способом:
temp.topmenu_2.2 = TMENU
temp.topmenu_2.2 {
wrap = <div class="m_down"> | </div>

NO{
before.cObject=LOAD_REGISTER
before.cObject{

mainMenuNumber = TEXT
mainMenuNumber{
cObject= COA
cObject{
wrap = |
10 = TEXT
10.value = {field:pid}
10.insertData = 1
}
wrap = {DB : pages:|:title}
insertData = 1
}
}

allWrap = <div class="m_down_item"> | </div> |*| <div class="m_down_item"> | </div> |*| <div class="m_down_item"> | </div></div><a href="index.php?id={field:pid}" id="active">{register:mainMenuNumber}</a>
allWrap.insertData = 1
}

ACT = 1
ACT{
ATagParams = id="active"

before.cObject=LOAD_REGISTER
before.cObject{

mainMenuNumber = TEXT
mainMenuNumber{
cObject= COA
cObject{
wrap = |
10 = TEXT
10.value = {field:pid}
10.insertData = 1
}
wrap = {DB : pages:|:title}
insertData = 1
}
}

allWrap = <div class="m_down_item"> | </div> |*| <div class="m_down_item"> | </div> |*| <div class="m_down_item"> | </div></div><a href="index.php?id={field:pid}" id="active">{register:mainMenuNumber}</a>
allWrap.insertData = 1
}

ACTIFSUB = 1
ACTIFSUB.allWrap = <div class="m_down_item"><!-- | -->
}

Жалко только что никто не помог - потерял несколько дней :(