2

\sites\all\themes\wellington にある wellington という Drupal テーマがあります。menu_item 関数をオーバーライドして、http://drupal.org/node/310356の指示に従いました。

説明されているように、クラスをliに追加したいと思います。

関数 wellington_menu_item に名前を付けようとしましたが、phptemplate_menu_item を試しましたが、うまくいきませんでした。関数に印刷ステートメントを入れることができ、これらは画面に表示されます。

さらに、返される直前に正しい文字列を出力できますが、メニューがレンダリングされると、違いはなく、通常のメインの文字列が表示されます。つまり、オーバーライドはありません。

テーマ自体は正常に機能しており、CSS と HTML を確認できます。

困惑しています、何かアイデアはありますか?

<?php
/**
* Theme override for theme_menu_item()
*/
function phptemplate_menu_item($link, $has_children, $menu = '', $in_active_trail = FALSE, $extra_class = NULL) {
  $class = ($menu ? 'expanded' : ($has_children ? 'collapsed' : 'leaf'));
  if (!empty($extra_class)) {
    $class .= ' '. $extra_class;
  }
  if ($in_active_trail) {
    $class .= ' active-trail';
  }

  // Add unique identifier
  static $item_id = 0;
  $item_id += 1;
  $id .= ' ' . 'menu-item-custom-id-' . $item_id;
  // Add semi-unique class
  $class .= ' ' . preg_replace("/[^a-zA-Z0-9]/", "", strip_tags($link));

  return '<li class="'. $class .'" id="' . $id . '">'. $link . $menu ."</li>\n";
}
?>

を使用して page.tpl.php で呼び出されます

<?php print theme('links', $primary_links); ?>
4

2 に答える 2

1

template.phpに関数を追加したときは、ブラウザーのキャッシュとdrupalキャッシュを空にすることを忘れないでください。ブラウザのキャッシュをクリアする必要はありませんが、他の変更に役立つ場合があります。

(サイト構成-パフォーマンス-キャッシュされたデータのクリア)

于 2010-07-14T10:02:04.527 に答える
1

結果の文字列を返す前に出力できることに言及したように、オーバーライドは機能します。私が疑っているのは、レンダリング時に関数の結果が実際に使用されていないことです。おそらく、後で呼び出される前処理関数で別の値でオーバーライドされるテンプレート変数に格納されているためです。

テーマ開発者モジュールを使用して、メニュー項目のレンダリングに使用されているテンプレート/関数を確認することをお勧めします。

于 2010-07-14T12:35:11.477 に答える