プログラムでリンク変数にリンクを追加する方法


8

Drupal 6を使用してい$linksますが、プログラムで他のリンクを含めるように変数を変更したいと考えています。私はこれを行う方法についてグーグルでハイとローを検索しましたが無駄です。誰かがこれを行う方法を知っていますか?

回答:


22

Drupal 6

Drupal 6では、テーマ内でフックを使用したり、フックを変更したりすることはできないため、リンクを変更するためのカスタムモジュール作成する必要があります。完了したら、hook_link()(新しいリンクを作成するhook_link_alter()場合)または(既存のリンクを変更する場合)実装する必要があります。

新しいリンクを追加する:

example_link($type, $object, $teaser = FALSE) {
  $links = array();
  // Add a custom link to nodes
  if ($type == 'node') {
    $links['example_mylink'] = array(
      'title' => t('Test link'),
      'href' => 'foo',
      'attributes' => array(
        'title' => 'Test link',
      ),
    );
  }
  return $links;
}

既存のリンクの変更:

example_link_alter(&$links, $node, $comment = NULL) {
  // Remove the read more link
  unset($links['node']['node_read_more']);

  // Change the title of the read more link
  $links['node']['node_read_more']['title'] = t('More information');

  // Move read more link to first slot
  $link_read_more = $links['node']['node_read_more'];
  unset($links['node']['node_read_more']);
  $links = $links['node'];
  $links['node'] = array(
    'node_read_more' => $link_read_more,
  ) + $links;

  // Move link to the last slot
  $link_read_more = $links['node']['node_read_more'];
  unset($links['node']['node_read_more']);
  $links['node']['node_read_more'] = $link_read_more;
}

Drupal 7

Drupal 7では、テーマが変更フックを実装できるため、これはもう少し簡単です。あなたが探している代替フックはhook_node_view_alter()

function example_node_view_alter(&$build) {
  // Remove the read more link
  unset($build['links']['node']['#links']['node-readmore']);

  // Add your own custom link
  $build['links']['node']['#links']['example-mylink'] = array(
    'title' => t('Test link'), 
    'href' => 'foo', 
    'html' => TRUE, 
    'attributes' => array(
      'title' => 'Test link',
    ),
  );

  // Move read more link to first slot
  $link_read_more = $build['links']['node']['#links']['node_read_more'];
  unset($build['links']['node']['#links']['node_read_more']);
  $links = $build['links']['node']['#links'];
  $build['links']['node']['#links'] = array(
    'node_read_more' => $link_read_more,
  ) + $links;

  // Move link to the last slot
  $link_read_more = $build['links']['node']['#links']['node_read_more'];
  unset($build['links']['node']['#links']['node_read_more']);
  $build['links']['node']['#links']['node_read_more'] = $link_read_more;
}

これをtemplate.phpファイルに直接配置できます。


ありがとう、これはまさに私が探していたものです!Drupal 6のtemplate.phpファイルを使用した興味深い回避策の実装から私を救いました。このソリューションはビューによって生成されたコンテンツで機能しますか?
user5013 2012年

@ user5013ビュー内の完全なノードまたはティーザー表示について考えている場合は、そのまま使用できます。ビューへのリンクを追加したい場合は、それも行うことができます:の値を'href'好きなように変更するだけです。

いいえ、この解決策がビューのフィールド表示で機能するかどうか考えていました。
user5013 2012年

@ user5013ああ、その場合は、いいえ:リンクは、ノードが完全に構築されたときにのみ追加されます。ただし、通常リンクバーに表示されるリンクの多くは、ビューの個別のフィールドとして使用できます。

1
@MotoTribeリンクは、配列に表示されるのと同じ順序でレンダリングされるため、順序を変更するのは単なる配列操作です。例を追加しました。

1

node.tpl.phpでレンダリングされるリンクについて話していると仮定すると、たとえばnode_linkを見て、hook_linkを実装する必要があります。drupalフックが初めての場合は、カスタムモジュールでこれを行う必要があるため、カスタムモジュール名が「foo」であるとするとfoo_link、hook_linkと同じ引数を持つ関数を呼び出す必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.