Drupal 7 - Меню для UL - PullRequest
       7

Drupal 7 - Меню для UL

1 голос
/ 07 апреля 2011

все. Этот вопрос, вероятно, имеет чертовски простой ответ, но он занимал меня несколько часов.

У меня есть главное меню и соответствующий ему блок на сайте Drupal, который я создаю. Как и все другие меню Drupal, он содержит множество ссылок на различные части сайта. Я могу назначить его блок региону, и ссылки меню получаются красивыми и отформатированными с заголовком и небольшими пунктами. Проблема, однако, в том, что я делаю собственную тему для этого сайта, и мне нужно иметь возможность работать со ссылками, не добавляя ничего, предпочтительно в виде чего-то простого, например ul.

Есть ли какая-нибудь функция, которая берет меню и выдает ul, содержащий все ссылки?

Может быть, есть какой-то способ уменьшить блок меню до уль.

Я экспериментировал с theme_menu_tree(...) и theme(...) безрезультатно.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 11 июля 2011

Я считаю , вы можете сделать большинство изменений с помощью CSS , например, установив <H2> заголовки на display: none и установив <LI> теги на float: left для горизонтальной панели навигации.


Но ... если вы хотите создать свое собственное меню из данных Drupal, вот код с сайта, над которым я работаю.Он строит двухуровневое меню.Я уверен, что вы могли бы упростить этот код еще больше, если вам нужно.

//----------- primary menu (horizontal with drop-downs) -------------------------

$params = array('max_depth' => 3);
$menu = menu_build_tree('main-menu', $params);
$variables['menu'] = $menu;

$html = '<ul>';

foreach($menu as $item_menu) { //for each main element

    $isSecondLevel = isset($item_menu['below']) && !empty($item_menu['below']);

    if ($isSecondLevel) {
        $html.= '<li>';
    } else {
        $html.= '<li class="sg">';
    }

    $html.= '<a class="topLevel" href="'.url($item_menu['link']['link_path']).'">';         
    $html .= $item_menu['link']['link_title'];
    $html .= '</a>';

    //is there any sub elements to display
    if ($isSecondLevel) {
        $html.= '<ul>';

        foreach($item_menu['below'] as $item_submenu) { //for each sub element
            $isThirdLevel=isset($item_submenu['below']) && ! empty($item_submenu['below']) ? 'main-menu-third_level' : '';

            $html.= '<li>';
            $html.= '<a href="'.url($item_submenu['link']['link_path']).'">';

            $html.= $item_submenu['link']['link_title'];

            $html.= '</a>';
            $html.= '</li>';
        }
        $html.= '</ul>';    
    }
    $html.= '</li>';
}
$html.= '</ul>';
$variables['main_menu_html'] = $html;

Этот код был помещен внутри function pinkribbon_process_page(&$variables) в template.php.Меню печатается в шаблоне по телефону <?php echo $main_menu_html ?>

Simon.

PS Другие, пожалуйста, не стесняйтесь редактировать этот код для ясности / простоты.

1 голос
/ 04 ноября 2012

Я советую вам использовать

menu_tree_output

вот так:

print render(menu_tree_output(menu_build_tree('main-menu', $parameters)));
0 голосов
/ 07 апреля 2011

Вы можете вызвать menu_build_tree , посмотреть его вывод и построить из него ul.Тем не менее, несмотря на то, что вывод меню по умолчанию имеет нагрузку «cruft», он является ul и должен быть темным с помощью CSS.

Если вы действительно хотите создать меню самостоятельно, я бы перепроектировал другой модуль, который так делает Хорошие меню

...