web-dev-qa-db-ja.com

Drupal 7の場合のhook_node_view()のノードを変更

コンテンツの配列を変更して、追加のリンクを追加しようとしています。

  • Linkモジュールを使用したくありません。このリンクは他のフィールドで生成されます。これは計算フィールドモジュールのようなものです(これはDrupal 7の開発段階にあり、私はむしろそれを使用しません)。
  • HTML/PHPをnode.tpl.phpに追加したくありません。これがいい解決策になりたいです。

私は$node->contentに新しいフィールドを追加しようとしています。別のフィールドをコピーして、もう一度表示することができました。そのフィールドのラベルは変更できましたが、リンク自体は変更できませんでした。

誰がどのように進めるかについて何か考えがありますか?

4
wtk

hook_node_view を実装することでこれを行うことができます。

例えば:

function my_module_node_view($node, $view_mode, $langcode) {
  switch ($node->type) {
    case 'my_node_type':
      $node->content['extra_link'] = array(
          '#weight' => 10,
          '#theme' => 'link',
          '#path' => 'path_to_content',
          '#text' => t('An extra link'),
          '#options' => array(
              'attributes' => array(),
              'html' => FALSE
          ),
      );
      break;
  }
}
9
Whiskey

Whiskyの回答はほとんどの場合機能しますが、URLの末尾にクエリ引数を追加しようとしても機能しませんでした。私の場合、次のようなURLを必要とする Entity Reference フィールドを事前に入力しています。

node/add/er-engagement?field_er_cal_entity_reference=19

ウイスキーの答えは、「html」が真か偽かにかかわらず、これを許可していないようです。

ただし、「#markup」属性は機能します。

function hook_node_view($node, $view_mode, $langcode){
  switch ($node->type) {
      case 'er_event':
        $node->content['links']['extra_link'] = array(
            '#weight' => 100, // place it at the bottom
            '#markup' => l('Add attendee data', 'node/add/er-engagement', array('query' => array('field_er_cal_entity_reference' => $node->nid))),
        );
        break;
}

}

あなたがそこにそれらの議論が必要な場合、それはうまくいきます。ドキュメントは不足していますが、- この投稿のおかげで 、Drupal 7のblog.moduleを確認するのに役立ちます。手掛かりを得るために '#links'を検索してください。

3
mikeDOTexe

クエリフラグメントを追加するには、オプションの配列内に配置するだけです。

$node->content['links']['extra_link'] = array(
    '#weight' => 10,
    '#theme' => 'link',
    '#path' => 'node/add/er-engagement',
    '#text' => t('Add attendee data'),
    '#options' => array(
        'html' => FALSE,
        'query' => array('field_er_cal_entity_reference' => $node->nid)
    ),
);

これは次のようなURLを返します:node/add/er-engagement?field_er_cal_entity_reference = 13

1
Aronne