web-dev-qa-db-ja.com

hook_node_viewを使用してプログラムでノードのコンテンツを変更する

ホームページのテキストの前に、プログラムでテキストを追加する必要があります。しかし、私がhook_node_view()を使用すると、次のようにこれを行うことができないようです:

function general_node_view(&$node, $view_mode, $langcode) {
    if ($node->nid == 1) { 
      //echo '<pre>' . print_r($node->body['und'][0]['value'],1) . '</pre>';
      $node->body['und'][0]['value'] = 'fdsf' .  $node->body['und'][0]['value'];
   }
 }

私はこれを間違った方法で行っていますか?

2
jenny wills

ホームページを表示する場合は、ノードをフロントページのコンテンツとして設定する必要があります。そうでなければ、このフックはあなたのホームページに対して何もしません。

ただし、このフックによってノードビューを展開できます。

$node->content['additional-text'] = array(
   '#markup' => 'TEXT TO GO BEFORE NODE VIEW',
   '#weight' => -10, // Set as lower as to bring this markup upper
);
2
Shoaib Nawaz

hook_node_view()のドキュメントで報告されているように:

モジュールは、レンダリングの前に_$node->content_に要素を追加できます。このフックはhook_view()の後に呼び出されます。 _$node->content_の構造は、drupal_render()が期待するレンダリング可能な配列です。

_$node->body_を変更する必要はありませんが、_$node->content_の内容を変更する必要があります。

1
kiamlaluno