0

デフォルトでは、ブログ ページのノード リンクには、blog_usernames_blog(管理者のブログ)、comment_add(新しいコメントを追加)、およびnode_read_more(続きを読む) が含まれます。

最初の 2 つを取り除き、node_read_more のテキストを変更する必要があります。

$themenamepreprocess_nodeこの内容で、私のテーマで template.phpという名前の関数を作成しました:

function mytheme_preprocess_node(&$vars, $hook){
    $node = $vars['node'];
    //blog node, not in full node page
    if($vars['node']->type == 'blog' AND !$vars['page']){
        $vars['node']->links['node_read_more']['title'] = t('My custom read more here');
        unset($vars['node']->links['blog_usernames_blog']);
        unset($vars['node']->links['comment_add']);
    }
    //debug:
    echo "<!-- DEBUG\n";
    print_r($vars['node']->links);
    echo "\n-->";
}

しかし、うまくいきません。関数の最後に出力$vars['node']->linksすると、リンク配列はまさに私が望むとおりです。ただし、ページがレンダリングされると、古いデフォルトのリンクが表示されます。

なんで?テーマ機能を使用して、ノード リスト ページでのみ、一部のコンテンツ タイプに対してのみノード リンクのテーマを設定するにはどうすればよいですか?

ps: 試行するたびに、キャッシュとテーマ レジストリをクリアしました ;)

4

1 に答える 1

1

まず: $hook でテストする必要があります。そうしないと、この前処理関数がすべての場所で呼び出されます。大規模なサーバーで小規模なサイトを運営している場合でも、サイトがダウンします。

2 番目: print_r が正しいリンクを出力する場合、コードが確実に /is/ 実行され、テーマ レジストリについて心配する必要はありません。

さて、あなたはおそらく間違ったテーマフックを見ているでしょう。theme_links はあなたが望むものです。http://api.drupal.org/api/function/theme_links/5

function mytheme_preprocess_links(&$vars, $hook){
    if ($hook == 'links') {
      var_dump($vars);
      unset($vars['links']['blog_usernames_blog']);
    }
}
于 2010-09-02T16:04:00.327 に答える