Drupal 7 - Меню UL

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

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

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

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

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

Спасибо!


person Christian Chapman    schedule 07.04.2011    source источник


Ответы (3)


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

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

person Thomas4019    schedule 07.04.2011
comment
Хорошо, я попробовал <?php print menu_build_tree($main_menu); ?>, и это привело к огромной ошибке синтаксиса SQL »PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')) ORDER BY p1 ASC, p2 ASC, p3 ASC, p4 ASC, p5 ASC, p6 ASC, p7 ASC, p8 ASC, p9 ' at line 2: TRUNCATED (ml.menu_name IN ()) ORDER BY p1 ASC, p2 ASC, p3 ASC, p4 ASC, p5 ASC, p6 ASC, p7 ASC, p8 ASC, p9 ASC; Array ( ) in _menu_build_tree() (line 1370 of /var/www/includes/menu.inc). - person Christian Chapman; 08.04.2011
comment
Хорошо, я решил просто нарезать выходной блок, как вы предложили. Это не очень элегантно или красиво и увеличивает загрузку страницы, но пока работает, пока я не найду что-нибудь получше. - person Christian Chapman; 08.04.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 ?>

Саймон.

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

person Simon East    schedule 11.07.2011

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

menu_tree_output

нравится:

print render(menu_tree_output(menu_build_tree('main-menu', $parameters)));
person redfog    schedule 04.11.2012
comment
Вау, намного чище! Спасибо за это. - person Christian Chapman; 08.11.2012