附在我的模板上,我从切片机收到的,有一个用于着色菜单项的javascript文件。 现在我需要将模板转换为Drupal模板。 javascript基于以下事实:每个菜单项都具有id,根据项目的顺序。 在Drupal中,菜单项只有类(menu-341,menu-342等)。我知道我可以调整javascript,所以它按类获取菜单项,但它实际上是不可能的,因为那时我需要完全扰乱整个文件,我试图阻止它。
我可以在所有主菜单项中添加ID,例如菜单项1'菜单项2'等等? 我应该在template.tpl.php中这样做,还是直接更改page.tpl.php中的输出?
感谢您的帮助。
编辑: 我很绝望,因为我不知道如何解决这个问题。还有其他方法可以为我的菜单项着色吗? 我使用的脚本在他们的升序ID(custom-menu-item-id-x)中选择菜单项,然后从阵列中为他们提供背景,与' x&#39相关联;的身份证明四种颜色:项目1的颜色1,项目2的颜色2,项目5的颜色1等..... 难道还有另一种解决方法吗?我不能让jQuery以升序自动选择它们(它遇到的第一个项目获得第一个背景,第二个项目第二个背景等)?请提出想法。在我看来,我尝试了一切。
这是我目前的剧本:
//Sequence of the background colors from the menu items, from left to right.
var backgrounds = ["blue", "green", "pink", "purple"];
//Gives the menu items a style when hovering over it, in the sequence of the setting in the variable 'backgrounds', on top.
jQuery(document).ready(function MenuColor($){
for (var i = 0; i <= 10 ; i++) {
document.getElementById("custom-menu-item-id-" + (i + 1)).onmouseover = (function(valueOfI){ return function() {
this.style.background = "url('images/" + backgrounds[(valueOfI % backgrounds.length)] + ".jpg')";
}; })(i);
var ActiveLi = $('.active').attr('id');
if("custom-menu-item-id-" + (i + 1) != ActiveLi) {
document.getElementById("custom-menu-item-id-" + (i + 1)).onmouseout = function() {
this.style.background = 'none';
}
}
}
});
答案 0 :(得分:0)
A quick search提供了多种选项,包括answer。是的 - 模板功能100%专为此类设计。 :)
编辑 - 没问题,但你的回答实际上是在RichTheGeek的评论中。他链接了新的D7函数,在评论主题中,这是一个根据标题向菜单项添加类的示例。这不是一个很好的例子,因为使用preg_replace是一种“沉重”的方式,但我不明白为什么这不起作用。我所做的就是在第11行换掉“class”作为“id”。
不要忘记将“yourtheme”替换为您正在使用的主题的实际系统名称。
function yourtheme_menu_link(array $variables) {
$element = $variables['element'];
$sub_menu = '';
$name_id = strtolower(strip_tags($element['#title']));
// remove colons and anything past colons
if (strpos($name_id, ':')) $name_id = substr ($name_id, 0, strpos($name_id, ':'));
//Preserve alphanumerics, everything else goes away
$pattern = '/[^a-z]+/ ';
$name_id = preg_replace($pattern, '', $name_id);
$element['#attributes']['id'][] = 'menu-' . $element['#original_link']['mlid'] . ' '.$name_id;
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";
}
?>
答案 1 :(得分:0)
但我最后自己管理了它。 首先,我在我的page.tpl.php中粘贴了这段代码(从Bartik page.tpl.php模板中复制):
<?php if ($main_menu): ?>
<div id="main-menu" class="navigation">
<?php print theme('links__system_main_menu', array(
'links' => $main_menu,
'attributes' => array(
'id' => 'main-menu-links',
'class' => array('links', 'clearfix'),
),
'heading' => array(
'text' => t('Main menu'),
'level' => 'h2',
'class' => array('element-invisible'),
),
)); ?>
</div> <!-- /#main-menu -->
<?php endif; ?>
这将“主菜单”放在正确的位置。 但是,我在menu.inc或template.php中更改的所有内容都不适用于它。 因此,我没有将代码放在那里,而是将BLOCK'主菜单'放在相应的区域中,突然间我能够改变一切。
所以在我的template.php中我添加了这个函数,它将ID写入了项目。
<?php
/**
* Returns HTML for a menu link and submenu.
*
* @param $variables
* An associative array containing:
* - element: Structured array data for a menu link.
*
* @ingroup themeable
*/
function exofes_menu_link(array $variables) {
$element = $variables['element'];
$sub_menu = '';
if ($element['#below']) {
$sub_menu = drupal_render($element['#below']);
}
static $item_id = 0;
$output = l($element['#title'], $element['#href'], $element['#localized_options']);
return '<li id="custom-menu-item-id-' . (++$item_id) . '"' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n";
}
?>
并且工作:D!
答案 2 :(得分:0)
function THEME_preprocess_page(&$vars) {
$menu = menu_navigation_links('menu-your-custom-menu-name');
$vars['custom_menu'] = theme('links__menu_your_custom_menu_name', array('links' => $menu));
}