2011-08-15 17 views
1

私のスライサーから受け取ったテンプレートに添付されているメニュー項目に色付けするためのjavascriptファイルがあります。 これで、テンプレートをDrupalテンプレートに変換する必要があります。 javascriptは、アイテムの順番に応じて、すべてのメニューアイテムにIDが付いているという事実に基づいています。 Drupalでは、メニュー項目にはクラス(メニュー341、メニュー342など)しかありません。私はjavascriptを調整することができるので、クラスごとにメニュー項目を取得することができますが、実際にはできません。なぜなら、ファイル全体を完全に動かす必要があるからです。drupalメインメニューのメニュー項目にIDを追加

「メニューアイテム-1」、「メニューアイテム2」などのメインメニューアイテムにIDを追加できますか? template.tpl.phpでこれを行うか、page.tpl.phpの出力を直接変更する必要がありますか?

ありがとうございました。

編集: 私はちょうどこれを修正する方法がわからないので、私は絶望的です。メニュー項目の色を変える別の方法はありますか? 私が使用しているスクリプトは、上向きのid(custom-menu-item-id-x)のメニュー項目を選択し、IDの 'x'に関連付ける配列の背景を与えます。 4色:アイテム1のカラー1、アイテム2のカラー2、アイテム5のカラー1など。 これを修正する別の方法はありませんか? jQueryに昇順で自動的に選択させることはできませんでした(最初の項目は最初の背景、2番目の項目の2番目の背景などを取得します)。アイデアを思いついてください。私はすべて、私の意見で試しました。

これは私の現在のスクリプトです:

//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

しかし、私はそれを最終的に自分で管理しました。 はまず、私は私の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"; 
} 
?> 

となっています。

0

A quick searchanswerどのように見えるかなど、いくつかのオプションを提供します。そして、ええと - テンプレート関数はこの種のもののために100%設計されています。 :)

EDIT - 問題はありませんが、あなたの答えは実際にRichTheGeekのコメントにあります。彼は新しいD7関数をリンクしています。コメントスレッドでは、タイトルに基づいてメニュー項目にクラスを追加する例です。 preg_replaceを使用することは "重い"方法ですが、これがうまくいかない理由はわかりません。私がしたのは、11行目の "id"の "class"を交換することだけでした。

"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"; 
} 
?> 
+0

私はすでにそのような答えを期待していました。しかし、私は宿題をしましたが、適切な答えを探しましたが、まだ答えはありません。 最初に:メインメニューにのみ必要です。 2番目:私はPHPを知らないので、多くのトピックが想定するほど簡単ではありません。 – jroeleveld

+0

そして.... [this](http://drupal.org/node/310356)のトピック(Drupalフォーラム)では、私と他のいくつかの人々がこの問題に対する解決策を求めています。 )答えを与える...私はこの問題を扱う唯一の人ではない。 – jroeleveld

+0

私はこれらの種類の答えが役に立たないと思います...回答がリンクにあっても、コメントのページを検索することなくそれを見ることができるはずです – Jukebox

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)); 
} 
関連する問題