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

Меню в две колонки

Новый топик
21.04.2010, 14:43
Ответить | Цитировать
dekart
DaHost.Ru

Зарегистрирован:
2005-03-26
Сообщений: 76

Нужно вывести меню в две колонки.

Шаблон навигации:
Код:
$newtd = "</ul><ul>";
$opers = "".( ($i/3 == floor($i%2!=0)&&$i!=0)? "$newtd" : '' )."";

$browse_sub[0][prefix] = "<ul>";
$browse_sub[0][suffix] = "</ul>";
$browse_sub[0][active] = "".opt($data[$i]!=0,"".opt($data[$i][ShowMenu],"<li><a href='%URL'>%NAME</a></li>")."")."".$opers;
$browse_sub[0][active_link] = "".opt($data[$i]!=0,"".opt($data[$i][ShowMenu],"<li><b><a href='%URL'>%NAME</a></b></li>")."")."".$opers;
$browse_sub[0][unactive] = "".opt($data[$i][ShowMenu],"".opt($data[$i]!=0,"<li><a href='%URL'>%NAME</a></li>")."")."".$opers;
$browse_sub[0][divider] = "";


Пункты меню разбивает на две колонки, но неправильно: в 1-м столбике - 4 пункта, во 2-м - 6.
Подскажите, пожалуйста, как сделать, чтобы разбилось на 5 и 5 пунктов в каждом столбике?
И хотелось бы, чтобы при добавлении новых пунктов не приходилось править код, а автоматически делило на два столбца (например, 6 и 5, 6 и 6 и т.д.)

Заранее спасибо за совет.

dekart
21.04.2010, 16:15
Ответить | Цитировать
malich
Андрей Малков

Зарегистрирован:
2005-08-09
Сообщений: 522

конструкция вызывает животный трепет!!!

Судя по всему у вас в разделы добавлено дополнительное поле $data[$i][ShowMenu], это чекбокс.
в этом случае $i использовать нельзя, так как она будет прибавляться на 1 в независимости от того верно условие или нет
Код:
".opt($data[$i][ShowMenu],"...")."


вам нужно добавить свой счетчик

затем как вы хотите выводить меню?:
1.
1 2
3 4
5 6

2.

1 4
2 5
3 6

случай 1:
Код:
$count=0;
$browse_sub[0][prefix] = "<ul>";
$browse_sub[0][suffix] = "</ul>";
$browse_sub[0][active] = "
".opt($data[$i]!=0,"
".opt($data[$i][ShowMenu],"<li><a href='%URL'>%NAME</a></li>".($count++,"")."")."
")."
";
$browse_sub[0][active_link] = "
".opt($data[$i]!=0,"
".opt($data[$i][ShowMenu],"<li><b><a href='%URL'>%NAME</a></b></li>".($count++,"")."")."
")."
";
$browse_sub[0][unactive] = $browse_sub[0][active];
$browse_sub[0][divider] = "".opt($counter!=0 && fmod($counter,2)==0,"</ul><ul>")."";


в чем суть, в начале присваиваем переменной $count 0 при каждом выводе пункта меню прибавляем к переменной +1 ($count++), если при делении $count на 2 получается 0 (fmod($counter,2)==0) вставляем разделитель. в вашем случае возможно потребуется поиграть с начальным значением переменной $count.

случай 2:
Код:
$count=0;
$countAll=$db->get_var("SELECT COUNT(*) as n FROM Subdivision WHERE ShowMenu=1 AND Checked=1");
$browse_sub[0][prefix] = "<ul>";
$browse_sub[0][suffix] = "</ul>";
$browse_sub[0][active] = "
".opt($data[$i]!=0,"
".opt($data[$i][ShowMenu],"<li><a href='%URL'>%NAME</a></li>".($count++,"")."")."
")."
";
$browse_sub[0][active_link] = "
".opt($data[$i]!=0,"
".opt($data[$i][ShowMenu],"<li><b><a href='%URL'>%NAME</a></b></li>".($count++,"")."")."
")."
";
$browse_sub[0][unactive] = $browse_sub[0][active];
$browse_sub[0][divider] = "".opt($count==ceil($countAll/2),"</ul><ul>")."";


в чем суть, в начале присваиваем переменной $count 0 при каждом выводе пункта меню прибавляем к переменной +1 ($count++),
переменной $countAll присваиваем общее количество разделов для вывода (у которых стоит галочка ShowMenu)
если значение нашего счетчика $count = делению общего числа записей для вывода на 2 то вставляем разделитель
В этом примере возможно опять придется поиграть с начальным значением переменной $count + вместо ceil возможно нужно будет использовать floor

floor
ceil
++
198 196 2010-04-21 16:15:57 9908
Описание проекта