0

Fusionでサブテーマを設定し、サブテーマにtemplate.phpファイルを作成しました。次のテーマオーバーライドを追加しましたが、完全に機能します。

function ThemeName_menu_local_tasks() {
    $output = '';
  if ($primary = menu_primary_local_tasks()) {
    $output .= "<div class=\"tabs primary\">\n";
    $output .= "<ul class=\"tabs primary\">\n" . $primary . "</ul>\n";
    $output .= "</div>\n";
  }
  if ($secondary = menu_secondary_local_tasks()) {
    $output .= "<div class=\"tabs secondary\">\n";
    $output .= "<ul class=\"tabs secondary\">\n" . $secondary . "</ul>\n";
    $output .= "</div>\n";    
  }
  return $output;
}

function ThemeName_filter_tips_more_info () {
    return '';
}

function ThemeName_filter_tips() {
    return '';
}

ただし、theme_linksをオーバーライドしようとすると、まったく機能しません。

function ThemeName_links($links, $attributes = array('class' => 'links')) {
  global $language;
  $output = '';

  if (count($links) > 0) {
    $output = '<div class = "abc"><ul' . drupal_attributes($attributes) . '>';

    $num_links = count($links);
    $i = 1;

    foreach ($links as $key => $link) {
      $class = $key;

      // Add first, last and active classes to the list of links to help out themers.
      if ($i == 1) {
        $class .= ' first';
      }
      if ($i == $num_links) {
        $class .= ' last';
      }
      if (isset($link['href']) && ($link['href'] == $_GET['q'] || ($link['href'] == '<front>' && drupal_is_front_page()))
           && (empty($link['language']) || $link['language']->language == $language->language)) {
        $class .= ' active';
      }
      $output .= '<li' . drupal_attributes(array('class' => $class)) . '>';

      if (isset($link['href'])) {
        // Pass in $link as $options, they share the same keys.
        $output .= l($link['title'], $link['href'], $link);
      }
      else if (!empty($link['title'])) {
        // Some links are actually not links, but we wrap these in <span> for adding title and class attributes
        if (empty($link['html'])) {
          $link['title'] = check_plain($link['title']);
        }
        $span_attributes = '';
        if (isset($link['attributes'])) {
          $span_attributes = drupal_attributes($link['attributes']);
        }
        $output .= '<span' . $span_attributes . '>' . $link['title'] . '</span>';
      }

      $i++;
      $output .= "</li>\n";
    }

    $output .= '</ul></div>';
  }

  return $output;
}

ちなみに、上記のThemeName_links()にテスト用に以下を追加しました。

<div class = "abc"> and </div>

また、Develを使用してすべてのキャッシュをフラッシュするをクリアしました。

4

1 に答える 1

0

あなたがすることはすべて正しいです (私はあなたがテーマのオーバーライドを行う方法を参照しています)、Fusion テーマ システムもうまく機能します。最初に、Fusion テーマを使用しようとすると、あなたと同じ問題に直面します。しかし、Fusion システムを調べて、Fusion がリンク (プライマリ リンク、セカンダリ リンクを含む) をどのように表示するかを確認した後、fusion/fusion_core/page.tpl.phpファイル内で、この関数をtheme('grid_block' , $primary_links_tree, 'primary-menu')を使用してプライマリ リンクを表示します。これは、Fusion によって作成された関数テーマです。Drupal のデフォルトのテーマ リンク関数theme('links', $primary_links)を呼び出して、そこから ThemName_links() をオーバーライドするだけです。

私が今やろうとしているもう 1 つのことは、 grid_block function をオーバーライドすることです。面白いものを見つけたら、後で投稿します。

于 2011-03-01T06:37:32.837 に答える