При администрировании сайта, зачастую приходиться прыгать по меню "Управление" и не всегда конечный пункт достигается за один клик. Бывает пока ждешь загрузки 2-3 страниц забываешь, что собственно хотел сделать. Поэтому я для себя написал небольшой скриптик, который распечатывает указанное меню в виде выпадающего списка. Очень удобно, выбрал, кликнул и ты уже там где хотел бы быть.
Вы можете возразить, что для этого можно использовать всяческие готовые модули, которые с помощью JavaScript делают выпадающие меню.
Я JavaScript откинул, так как, не везде он работает. И еще если я администрирую сайт с КПК, то выпадающие Java меню отображаются раскрытыми и мне придется каждый раз продираться через эти меню.
Вот собственно код:
в файл темы template.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))
?>
Если у пользователя нет прав на это меню, то он ничего не увидит. Функция не выдаст результата.
Комментарии
Спасибо, весьма полезно.
Небольшое изменение:
<?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 = '
';
$output .='';
$output .= $menu['visible'][$pid]['title'];
$output .='';
foreach ($menu['visible'][$pid]['children'] as $mid) {
$item = menu_get_menu($mid);
$output .='';
$output .= $item['visible'][$mid]['title'];
$output .='';
if(isset($item['visible'][$mid]['children'])) {
foreach ($item['visible'][$mid]['children'] as $mid_2) {
$item_2 = menu_get_menu($mid_2);
$output .='- ';
$output .= $item_2['visible'][$mid_2]['title'];
$output .='';
}
}
}
$output .='';
}
return $output;
}
?>
В этом варианте я убрал кнопки перехода.
Переход осуществляется при выборе пункта меню из списка.
В качестве начальной точки задается не массив, а просто ID меню.
Например, для меню "Управление" пишите:
<?php
print menu_to_select_list(5)
?>
В первом варианте был массив т.к. я планировал задавать несколько начальных точек и что бы они складывались в один лист, но с этим пока проблемы.
Присоединяюсь к Shedko. Спасибо.
спасибо, полезно
Спасибо!
У Вас во втором варианте функции menu_to_select_list ошибка в строке 11. Нет цикла.Виноват. Вызвал не так
А чем плохо админ меню?
Мне например понадобилось именно такое.
print menu_to_select_list(5)-именно в какое место надо всавлять???
Если я хочу чтоб у меня было выпадающий меню в примари линкс!!!!!!!
Это выпадающий список! Выпадающее меню это другое.
а что нужно чтобы вывести для форума такой выпадающий список?
какая цифра в конце?
Ну да, или можно просто зайти в управление меню, навести курсор на пункт "изменить" и посмотреть на строку состояния
Еще для заметки.
В результате различных экспериментов выяснено, что данный способ НЕ РАБОТАЕТ если у Вас изменен файл .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