Отображение меню в виде выпадающего списка
Прислано: seaji
вс, 13/05/2007 - 20:57
При администрировании сайта, зачастую приходиться прыгать по меню "Управление" и не всегда конечный пункт достигается за один клик. Бывает пока ждешь загрузки 2-3 страниц забываешь, что собственно хотел сделать. Поэтому я для себя написал небольшой скриптик, который распечатывает указанное меню в виде выпадающего списка. Очень удобно, выбрал, кликнул и ты уже там где хотел бы быть.
Вы можете возразить, что для этого можно использовать всяческие готовые модули, которые с помощью JavaScript делают выпадающие меню.
Я JavaScript откинул, так как, не везде он работает. И еще если я администрирую сайт с КПК, то выпадающие Java меню отображаются раскрытыми и мне придется каждый раз продираться через эти меню.
Вот собственно код:
в файл темы template.php пропишите такую функцию:
<?php function menu_to_select_list($mpid = array()) { global $base_path; $menu = menu_get_menu(); foreach ($mpid as $pid) { if (isset($menu['visible'][$pid]) && $menu['visible'][$pid]['children']) { $output = '<form name="create" action="'.$base_path.'" method="get" class="top_bar_form left"> <select size="1" name="q">'; $output .='<option value="'; $output .= $menu['visible'][$pid]['path']; $output .='">'; $output .= $menu['visible'][$pid]['title']; $output .='</option>'; foreach ($menu['visible'][$pid]['children'] as $mid) { $item = menu_get_menu($mid); $output .='<option value="'; $output .= $item['visible'][$mid]['path']; $output .='">'; $output .= $item['visible'][$mid]['title']; $output .='</option>'; if(isset($item['visible'][$mid]['children'])) { foreach ($item['visible'][$mid]['children'] as $mid_2) { $item_2 = menu_get_menu($mid_2); $output .='<option value="'; $output .= $item_2['visible'][$mid_2]['path']; $output .='">- '; $output .= $item_2['visible'][$mid_2]['title']; $output .='</option>'; } } } $output .='</select> <input type="submit" value=">" class="form-submit"></form>'; } } return $output; } ?>
Дальше Вы можете вызывать функцию menu_to_select_list($mpid = array()) где угодно.
Хотите, прописывайте ее в page.tpl.php. Хотите вызывайте ее в блоке (фильтрация PHP).
Например, для меню "Управление" пишите:
<?php
print menu_to_select_list(array(5))
?>Для меню "Создание материала" пишите:
<?php
print menu_to_select_list(array(9))
?>Если у пользователя нет прав на это меню, то он ничего не увидит. Функция не выдаст результата.
- seaji's blog
- Для комментирования войдите или зарегистрируйтесь
Спасибо, весьма полезно.
- Для комментирования войдите или зарегистрируйтесь
Небольшое изменение:
<?php
/**
* Return select list for paticular menu and 2 children
*
* @param $pid
* Menu ID for starting point
* @return HTML for select list.
*/
function menu_to_select_list($pid) {
global $base_path;
$menu = menu_get_menu();
if (isset($menu['visible'][$pid]) && $menu['visible'][$pid]['children']) {
$output = '<form name="create" action="'.$base_path.'" method="get" class="top_bar_form left">
<select size="1" name="q" onchange="submit()">';
$output .='<option value="';
$output .= $menu['visible'][$pid]['path'].'"';
if ($_GET['q']==$menu['visible'][$pid]['path']){
$output .=' selected="selected"';
}
$output .='>';
$output .= $menu['visible'][$pid]['title'];
$output .='</option>';
foreach ($menu['visible'][$pid]['children'] as $mid) {
$item = menu_get_menu($mid);
$output .='<option value="';
$output .= $item['visible'][$mid]['path'];
$output .='">';
$output .= $item['visible'][$mid]['title'];
$output .='</option>';
if(isset($item['visible'][$mid]['children'])) {
foreach ($item['visible'][$mid]['children'] as $mid_2) {
$item_2 = menu_get_menu($mid_2);
$output .='<option value="';
$output .= $item_2['visible'][$mid_2]['path'];
$output .='">- ';
$output .= $item_2['visible'][$mid_2]['title'];
$output .='</option>';
}
}
}
$output .='</select></form>';
}
return $output;
}
?>В этом варианте я убрал кнопки перехода.
Переход осуществляется при выборе пункта меню из списка.
В качестве начальной точки задается не массив, а просто ID меню.
Например, для меню "Управление" пишите:
<?php
print menu_to_select_list(5)
?>В первом варианте был массив т.к. я планировал задавать несколько начальных точек и что бы они складывались в один лист, но с этим пока проблемы. :(
- Для комментирования войдите или зарегистрируйтесь
Присоединяюсь к Shedko. Спасибо.
- Для комментирования войдите или зарегистрируйтесь
спасибо, полезно :)
- Для комментирования войдите или зарегистрируйтесь
Спасибо! У Вас во втором варианте функции menu_to_select_list ошибка в строке 11. Нет цикла.
Виноват. Вызвал не так =)
- Для комментирования войдите или зарегистрируйтесь
А чем плохо админ меню?
- Для комментирования войдите или зарегистрируйтесь
Мне например понадобилось именно такое.
- Для комментирования войдите или зарегистрируйтесь
print menu_to_select_list(5)-именно в какое место надо всавлять???
Если я хочу чтоб у меня было выпадающий меню в примари линкс!!!!!!!
- Для комментирования войдите или зарегистрируйтесь
Это выпадающий список! Выпадающее меню это другое.
- Для комментирования войдите или зарегистрируйтесь
а что нужно чтобы вывести для форума такой выпадающий список?
какая цифра в конце?
- Для комментирования войдите или зарегистрируйтесь
какая цифра в конце?
смотри в таблицах БД идентификатор меню. Столбец mid помоему.
- Для комментирования войдите или зарегистрируйтесь
Ну да, или можно просто зайти в управление меню, навести курсор на пункт "изменить" и посмотреть на строку состояния :))
- Для комментирования войдите или зарегистрируйтесь
Еще для заметки.
В результате различных экспериментов выяснено, что данный способ НЕ РАБОТАЕТ если у Вас изменен файл .htaccess на предмет IndexPage.
- Для комментирования войдите или зарегистрируйтесь
я так понял, мне нужно создать сначало меню
кстати, модуль jumpmenu делает тоже самое - из имеющихся меню делает выпадающее :)
- Для комментирования войдите или зарегистрируйтесь
Специалисты, подскажите как это дело перевести под шестой Друпал?
Стал переводить свой сайт videotech.spb.ru на D6, а у них там вся система меню поменялась.
Може кто подскажет на вскидку функцию для D6 вместо функуции menu_get_menu() в D5 ???
- Для комментирования войдите или зарегистрируйтесь
jumpmenu посмотри код, там есть.
- Для комментирования войдите или зарегистрируйтесь
Че то я не совсем понял.
http://drupal.org/project/jumpmenu - есть релизы только для D5.
Я же спрашивал про Drupal 6
- Для комментирования войдите или зарегистрируйтесь
есть модуль jump
- Для комментирования войдите или зарегистрируйтесь
перепутал ссылки.
http://drupal.org/project/jump
- Для комментирования войдите или зарегистрируйтесь
Можно ли его использовать, если мне нужно вывести в выпадающем списке только подменю?
- Для комментирования войдите или зарегистрируйтесь








Комментарии