我有一个问题要问你。
我正在尝试用drupal 7制作一个网站,除了一些小问题之外,它几乎已经完成了,我需要主菜单的第一级有一些自定义的css类才能将其集成到列中,这是我打印主菜单的方式:
<?php
print theme(
'links__system_main_menu',
array(
'links' => $main_menu,
'attributes' => array(
'id' => 'main-menu',
'class' => array('menu')
)
)
);
?>
这就是我得到的:
<ul id="main-menu" class="menu">
<li class="menu-NNN first active">
<a href="url" title="" class="active">Home</a>
</li>
<li class="menu-NNN">
<a href="url">click me</a>
</li>
<li class="menu-NNN">
<a href="url">click me</a>
</li>
<li class="menu-NNN">
<a href="url">click me</a>
</li>
<li class="menu-NNN last">
<a href="url">click me</a>
</li>
</ul>
我需要主菜单的第一级有类"col_1":
<ul id="main-menu" class="menu">
<li class="menu-NNN first .col_1 active">
<a href="url" title="" class="active">Home</a>
</li>
<li class="menu-NNN .col_1">
<a href="url">click me</a>
</li>
<li class="menu-NNN .col_1">
<a href="url">click me</a>
</li>
<li class="menu-NNN .col_1">
<a href="url">click me</a>
</li>
<li class="menu-NNN .col_1 last">
<a href="url">click me</a>
</li>
</ul>
布局如下所示:
/****************************************************************************************
* * .row * *
* ********************************************************************************* *
* * #logo.col_5 * * .pre_1| .col_5 |.suf_1 * *
* * * * | | * *
* * * * | | * *
* * * * |__________________________________| * *
* * *mar* |.col_1|.col_1|.col_1|.col_1|.col_1| * *
* * *gin*padding| menu1| menu2| menu3| menu4| menu5|padding* *
*mar*********************************************************************************mar*
*gin* *gin*
****************************************************************************************/
//I'm expecting to have just 5 links in the main menu
也许我可以使用css手动设置宽度和边距,但我认为这不是正确的方法,因此,"使用 CSS 为每个子元素设置属性"是行不通的,我也尝试使用"MYTHEME_menu_link",但这会将属性添加到除主菜单以外的所有菜单中,所以这也行不通。
所以问题是:
有没有另一种方法可以将 CSS 类添加到 Drupal 主菜单的第一级?
如果您希望使用自己的模块或主题模板.php文件来实现相同的目标,则可以使用自己的 drupal theme_menu_link() 实现
示例代码:
function [THEME_OR_MODULE]_menu_link(array $variables) {
$element = $variables['element'];
$sub_menu = "";
$element['#attributes']['class'][] = "col_1";
if ($element['#below']) {
$sub_menu = drupal_render($element['#below']);
}
$output = l($element['#title'], $element['#href'], $element['#localized_options']);
return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>n";
}
经过一番调查。我找到了一种方法来实现我的目标,而无需使用解决方法或任何基于本文的外部模块(如何在 Drupal 7 中为 Bartik 创建下拉菜单),我使用"variable_get"、"menu_tree"和"drupal_render"用包含具有所需格式的菜单的字符串覆盖变量"main_menu",覆盖变量"main_menu"我使用了"THEME_process_page";
function MYTHEME_process_page(&$variables) {
global $language;
if($variables['main_menu']){
$tree = menu_tree(variable_get('menu_main_links_source', 'main-menu'));
foreach($tree as $key => $val){
if(isset($tree[$key]['#href'])){ //just to make sure this is a link
if($language->language!=$tree[$key]["#localized_options"]["langcode"])
unset($tree[$key]);
else
$tree[$key]['#attributes']['class'][] = 'col_1';
}
}
$variables['main_menu'] = drupal_render($tree);
}
}
在此修改之前,"main_menu"是一个数组,但现在它是一个包含菜单的字符串,所以,现在,我必须替换 tamplate 中的函数 'theme'。
<?php
print theme(
'links__system_main_menu',
array(
'links' => $main_menu,
'attributes' => array(
'id' => 'main-menu',
'class' => array('menu')
)
)
);
?>
有了这样的东西;
<?php print $main_menu; ?>
尝试使用菜单 CSS 名称模块。