Новости | 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>