web-dev-qa-db-ja.com

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

私はDrupal 6を使用しており、$links変数を変更して他のリンクをプログラムで追加したいと考えています。これを行う方法について、Googleで高低を検索してみました。誰かがこれを行う方法を知っていますか?

8
user5013

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_ファイルに直接配置できます。

22
user7

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

1
Dipen