如何以编程方式将链接添加到links变量


8

我正在使用Drupal 6,并且想修改该$links变量以编程方式包含其他链接。我在Google上搜索了很多内容,但都无济于事。有人知道该怎么做吗?

Answers:


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中,这有点简单,因为主题可以实现alter hook。您正在寻找的alter hook是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上呈现的链接,则需要实现hook_link,例如,查看node_link。而且,如果您不熟悉Drupal挂钩,那么这需要在自定义模块中进行,因此,可以说您的自定义模块名称为“ foo”,则需要编写一个函数foo_link,该函数应具有与hook_link相同的参数。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.