| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Givi 03.07.2002 20:54
Вот код. К нему нужно ещё сделать файлПоля, типа :))) id >> uri >> name >> inscription >> in_menu ( >> - это табуляторы)
@showMainMenu[width;cols] Выводит меню навигации по разделам сайта
#Определяем количество элементов меню
$menuItems[0]
^section.menu{
^if($section.in_menu!=0){$menuItems($menuItems+1)}
}
#В случае если не задано количество столбцов, оно устанавливается равным количеству элементов меню.
^if(!def $cols || $cols>$menuItems){$cols[$menuItems]}
#В случае если не задана ширина меню, она устанавливается равной 100%.
^if(!def $width){$width[100%]}
#Определяем размер столбцов $columnWidth, в зависимости от их количества и ширины всего меню. Размер может быть указан в процентах, в этом случае, ширина столбца считается как (100/количество столбцов)%, чтобы они все имели одинаковый размер. Если размер не в процентах, то в переменную $rest кладём остаток от деления, который понадобится если нужно чтобы меню точно соответствовало указанному размеру.
$percent[^width.match[(^^[0-9]+)][gi]{$columnWidth[$match.1]}]
^if(def $percent){
$columnWidth[^eval(100\$cols)$percent]
}{
$columnWidth[^math:floor(^eval($columnWidth/$cols))]
$rest($width%$cols)
}
#Определяем количество строк меню.
$rows[^math:ceiling($menuItems/$cols)]
#Формируем хэш $hMenu, имеющий вид $hMenu.строка.столбец[и там ещё параметры].
$endTable(0>1)
$hMenu[
^for[i](1;$rows){
$.$i[
#Переменная для контроля цикла.
$endWhile(0<1)
$j[0]
^while($endWhile){
#Проверяем, показывать ли элемент в меню.
^if($section.in_menu==1){
$j($j+1)
$.$j[
#Проверяем, достигнут ли конец таблицы. Если конец таблицы достигнут то оставшиеся элементы пустые.
^if(!$endTable){
$.uri[${root}$section.uri]
$.name[$section.name]
#Проверяем, является ли элемент активным.
^if($section.id==$sectionId){
$.state[active]
}{
$.state[default]
}
}{
$.uri[]
$.name[]
$.state[empty]
}
]
^if($j==$cols){$endWhile(0>1)}
}
^if(^section.line[]>=$section){
$endTable(0<1)
}{
^section.offset(1)
}
}
]
}
$endTable[]
$endWhile[]
]
#Выводим таблицу меню.
<table width="$width" border="0" cellspacing="1" cellpadding="2" bgcolor="#000000" class="mainMenu">
^for[i](1;$rows){
<tr bgcolor="#ffffff">
^for[j](1;$cols){
^switch[$hMenu.$i.$j.state]{
^case[active]{
<td ^if($i==1){width="$columnWidth" }class="mainMenuActiveItem" bgcolor="#99ccff" align="middle">$hMenu.$i.$j.name</td>
}
^case[default]{
<td ^if($i==1){width="$columnWidth" } class="mainMenuItem" align="middle"><a href="$hMenu.$i.$j.uri">$hMenu.$i.$j.name</a></td>
}
^case[empty]{
<td ^if($i==1){width="$columnWidth" } class="mainMenuItem" align="middle">Q! ^;</td>
}
}
}
#Если первая строка и определён $rest то добавляем в таблицу столбец, чтоб размер точный был.
#Только всё равно, наверное размер не будет точным поскольку есть ещё cellpadding и cellspacing.
^if($i==1 && $rest!=0){
<td rowspan="$rows" width="$rest" bgcolor="#990000"></td>
}
</tr>
}
</table>