it-swarm-ja.com

特定のコンテンツタイプのノードタイトルを上書きするにはどうすればよいですか?

Drupal 7サイトのコンテンツタイプ 'ABC'のタイトルの前にチャプタタグ(§)を追加しようとしています。

私は以下を試しました:

function mytheme_preprocess_node(&$variables) {
  if ($variables['view_mode'] == 'full' && node_is_page($variables['node'])) {
    $variables['classes_array'][] = 'node-full';
  }
  //watchdog("mytheme_preprocess_node", 'items %items', array('%items' => print_r($variables['node'], true)));
  $node = $variables['node'];
  if ($node->type=='abc') {
    $node->title = 'this is a test' . $node->title; 
    $variables['node'] = $node;
    watchdog("mytheme", 'items %items', array('%items' => print_r($variables['node'], true)));
  }
}

ログにメッセージ出力が表示されましたが、更新されたタイトルがサイトに表示されません。

5
Vlad Vinnikov

モジュール(またはテーマ)から作成されたhook_preprocess_node()のすべての実装は、次のコードを含む template_preprocess_node() の後に実行されます。

_  $variables['node_url']  = url($uri['path'], $uri['options']);
  $variables['title']     = check_plain($node->title);
  $variables['page']      = $variables['view_mode'] == 'full' && node_is_page($node);
_

template_preprocess_node()はNodeモジュールから実行される前処理関数であり、theme_node()を定義するモジュールです。

テンプレートファイルは、ページタイトルに_$title_を使用します。

_  <?php print render($title_prefix); ?>
  <?php if (!$page): ?>
    <h2<?php print $title_attributes; ?>>
      <a href="<?php print $node_url; ?>"><?php print $title; ?></a>
    </h2>
  <?php endif; ?>
  <?php print render($title_suffix); ?>
_

タイトルの値を変更する場合は、プリプロセス関数の_$title_の値を変更する必要があります。

プリプロセス関数の実行順序は、 theme() のドキュメントで説明されています。そのドキュメントでは、「HOOK」は前処理関数のタイプのプレースホルダーです。 「ノード」、「html」、「ページ」。テーマに使用されるレンダリングエンジン、モジュール、および現在設定されているテーマの間で、テーマから実装される前処理関数が最後に呼び出されます。これは、タイトルを変更する別のモジュールがあり、テーマの1つのセットを使用する場合に役立ちます。

私が報告したことは、Drupal 6.にも当てはまります。

7
kiamlaluno