Регистрация
Вход через соцсети
Восстановление пароля

Меню в несколько строк

Новый топик
16.06.2009, 22:23
Ответить | Цитировать
viros
Правдин Виталий

Зарегистрирован:
2008-12-03
Сообщений: 120

Доброго всем времени.
Не думал что упрусь в такое, но вот. Была когда-то здесь тема "Меню матрицей", общение там прошло весьма "душевно", но результата не дало.
И вот теперь необходимо примерно то же. Необходимо сделать меню, в моем случае 2-го уровня в виде 4хN, т.е. в строке должно быть не больше 4х пунктов, а самих строк может быть сколько угодно.
В HTML в грубой форме что-то вроде
Код:
<table width='781' height="200">
<tr><td align="center">
<table><tr><td width="150" align="center">1</td></tr></table>
</td><td width="10"></td>
<td align="center">
<table><tr><td width="150" align="center">2</td></tr></table>
</td><td width="10"></td>
<td align="center">
<table><tr><td width="150" align="center">3</td></tr></table>
</td><td width="10"></td>
<td align="center">
<table><tr><td width="150" align="center">4</td></tr></table>
</td>
</tr>
<tr><td align="center">
<table><tr><td width="150" align="center">5</td></tr></table>
</td><td width="10"></td>
<td align="center">
<table><tr><td width="150" align="center">6</td></tr></table>
</td><td width="10"></td>
<td align="center">
<table><tr><td width="150" align="center">7</td></tr></table>
</td><td width="10"></td>
<td align="center">
<table><tr><td width="150" align="center">8</td></tr></table>
</td>
</tr>
</table>


В навигации сколько не писал, все ограничивалось либо просто в строку, либо в столбец. Как там определить что необходимо не больше 4 элементов меню и дальше переход на новую строку.
Код:
$browse_sub[2][prefix] = "<table width='781' height='200'><tr>";
$browse_sub[2][active] = "<td align='center'><table><tr><td width='150' align='center'>%NAME</td></tr></table></td>";
$browse_sub[2][active_link] = "<td align='center'><table><tr><td width='150' align='center'>%NAME</td></tr></table></td>";
$browse_sub[2][unactive] = "<td align='center'><table><tr><td width='150' align='center'>%NAME</td></tr></table></td>";
$browse_sub[2][divider] = "<td width='10'></td>";
$browse_sub[2][suffix] = "</tr></table>";

Так получается только строка...Может мозг замылился уже...) Где какой разделитель написать!?..
17.06.2009, 06:57
Ответить | Цитировать
pe3udent
Артур Юсупов

Зарегистрирован:
2008-04-03
Сообщений: 220

Разделитель - </tr><tr>, вставлять нужно, если остаток от деления ($i + 1) на 4 равен 0, при этом элемент не должен быть последним, иначе вставится пустая строка:

Код:
$browse_s[prefix] = "<table><tr>";
$browse_s[suffix] = "</tr></table>";
$browse_s[active] = "<td><a href='%URL'>%NAME</a></td>".( $i != (count($data) - 1) && ($i + 1)%4 == 0 ? "</tr><tr>" : NULL ).( $i == (count($data) - 1) && ($i + 1)%4 != 0 ? str_repeat("<td></td>", (4 - ($i + 1)%4)) : NULL )."";
$browse_s[unactive] = "<td><a href='%URL'>%NAME</a></td>".( $i != (count($data) - 1) && ($i + 1)%4 == 0 ? "</tr><tr>" : NULL ).( $i == (count($data) - 1) && ($i + 1)%4 != 0 ? str_repeat("<td></td>", (4 - ($i + 1)%4)) : NULL )."";
$browse_s[divider] = "";


Код:
( $i == (count($data) - 1) && ($i + 1)%4 != 0 ? str_repeat("<td></td>", (4 - ($i + 1)%4)) : NULL )


- эта конструкция нужна для дополнения неполной строки таблицы пустыми ячейками до четырех.
17.06.2009, 11:06
Ответить | Цитировать
viros
Правдин Виталий

Зарегистрирован:
2008-12-03
Сообщений: 120

Супер!) Работает как надо! Благодарности моей нет границ. Как, единственное для меня остается секретом, можно разобраться в этом!?
Цитата:
( $i == (count($data) - 1) && ($i + 1)%4 != 0 ? str_repeat("<td></td>", (4 - ($i + 1)%4)) : NULL )
чтобы в будущем самостоятельно писать!?...
17.06.2009, 11:38
Ответить | Цитировать
pe3udent
Артур Юсупов

Зарегистрирован:
2008-04-03
Сообщений: 220

Код:
( $i == (count($data) - 1) && ($i + 1)%4 != 0 ? str_repeat("<td></td>", (4 - ($i + 1)%4)) : NULL )


в переводе на русский: если порядковый номер (индекс) текущего элемента равен количеству элементов массива (то бишь последний в массиве) и не является последним в строке (не четвертый) - вывести строку "<td></td>" ровно столько раз, сколько осталось до заполнения строки.

Или вам необходимо описание синтаксиса?
17.06.2009, 12:02
Ответить | Цитировать
viros
Правдин Виталий

Зарегистрирован:
2008-12-03
Сообщений: 120

Логику данной строки я конечно осознал. А вообще конечно хотелось бы синтаксис освоить дабы вдруг придется что-то иное написать... Вообще уже сталкивался с подобным написанием, но вот откуда оно все и как пишется...Доселе подобное написание && для меня было просто как два символа))Есть может дока где, какая-нибудь!?
17.06.2009, 12:07
Ответить | Цитировать
pe3udent
Артур Юсупов

Зарегистрирован:
2008-04-03
Сообщений: 220

в таком случае php man в помощь улыбка
17.06.2009, 13:50
Ответить | Цитировать
viros
Правдин Виталий

Зарегистрирован:
2008-12-03
Сообщений: 120

улыбка)Акей! Спасибо!
198 196 2009-06-17 13:50:01 7730
Описание проекта