Отображение меню в виде выпадающего списка

Прислано: 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))
?>

Если у пользователя нет прав на это меню, то он ничего не увидит. Функция не выдаст результата.

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано Shedko в вс, 13/05/2007 - 23:29.

Спасибо, весьма полезно.


Опубликовано seaji в сб, 30/06/2007 - 00:17.

Небольшое изменение:

<?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)
?>

В первом варианте был массив т.к. я планировал задавать несколько начальных точек и что бы они складывались в один лист, но с этим пока проблемы. :(


Опубликовано RISK в сб, 30/06/2007 - 00:07.

Присоединяюсь к Shedko. Спасибо.


Опубликовано Valeratal в вт, 09/10/2007 - 15:15.

спасибо, полезно :)


Опубликовано player в вс, 10/02/2008 - 12:38.

Спасибо! У Вас во втором варианте функции menu_to_select_list ошибка в строке 11. Нет цикла.
Виноват. Вызвал не так =)


Опубликовано PVasili в ср, 27/02/2008 - 14:10.

А чем плохо админ меню?


Опубликовано player в ср, 27/02/2008 - 15:46.

Мне например понадобилось именно такое.


Опубликовано inkar в пт, 18/04/2008 - 18:12.

print menu_to_select_list(5)-именно в какое место надо всавлять???
Если я хочу чтоб у меня было выпадающий меню в примари линкс!!!!!!!


Опубликовано player в сб, 19/04/2008 - 09:39.

Это выпадающий список! Выпадающее меню это другое.


Опубликовано Valeratal в вт, 06/05/2008 - 11:28.

а что нужно чтобы вывести для форума такой выпадающий список?
какая цифра в конце?


Опубликовано player в вт, 06/05/2008 - 14:36.

Цитата:

какая цифра в конце?

смотри в таблицах БД идентификатор меню. Столбец mid помоему.


Опубликовано seaji в вт, 06/05/2008 - 21:54.

Ну да, или можно просто зайти в управление меню, навести курсор на пункт "изменить" и посмотреть на строку состояния :))


Опубликовано seaji в вт, 06/05/2008 - 22:01.

Еще для заметки.
В результате различных экспериментов выяснено, что данный способ НЕ РАБОТАЕТ если у Вас изменен файл .htaccess на предмет IndexPage.


Опубликовано Valeratal в ср, 07/05/2008 - 09:03.

я так понял, мне нужно создать сначало меню

кстати, модуль jumpmenu делает тоже самое - из имеющихся меню делает выпадающее :)


Опубликовано seaji в пн, 05/01/2009 - 16:17.

Специалисты, подскажите как это дело перевести под шестой Друпал?
Стал переводить свой сайт videotech.spb.ru на D6, а у них там вся система меню поменялась.
Може кто подскажет на вскидку функцию для D6 вместо функуции menu_get_menu() в D5 ???


Опубликовано gor в пн, 05/01/2009 - 16:23.

jumpmenu посмотри код, там есть.


Опубликовано seaji в вс, 11/01/2009 - 14:47.

Че то я не совсем понял.
http://drupal.org/project/jumpmenu - есть релизы только для D5.
Я же спрашивал про Drupal 6


Опубликовано Valeratal в вс, 11/01/2009 - 17:39.

есть модуль jump


Опубликовано gor в вс, 11/01/2009 - 18:17.

перепутал ссылки.
http://drupal.org/project/jump


Опубликовано 7Rei в пт, 04/02/2011 - 01:51.

"gor" написал(а):

http://drupal.org/project/jump

Можно ли его использовать, если мне нужно вывести в выпадающем списке только подменю?


Новое на сайте

Ссылки партнёров