Cách lập trình thêm liên kết vào biến liên kết


8

Tôi đang sử dụng Drupal 6 và muốn sửa đổi $linksbiến để bao gồm các liên kết khác theo chương trình. Tôi đã tìm kiếm cao và thấp trên Google về cách làm điều này vô ích. Có ai biết làm thế nào để làm điều này?

Câu trả lời:


22

Drupal 6

Trong Drupal 6, bạn không thể sử dụng móc hoặc thay đổi móc trong chủ đề, vì vậy bạn sẽ cần tạo một mô-đun tùy chỉnh để sửa đổi các liên kết. Sau khi hoàn thành, bạn sẽ muốn triển khai hook_link()(nếu bạn đang tạo một liên kết mới) hoặc hook_link_alter()(nếu bạn muốn sửa đổi một liên kết hiện có).

Thêm một liên kết mới:

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;
}

Sửa đổi các liên kết hiện có:

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

Trong Drupal 7, điều này đơn giản hơn một chút, vì các chủ đề có thể thực hiện các móc thay đổi. Móc thay đổi mà bạn đang tìm kiếm là 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;
}

Bạn có thể đặt nó trực tiếp trong template.phptập tin của bạn .


Cảm ơn, đây chính xác là những gì tôi đang tìm kiếm! Bạn đã cứu tôi khỏi việc triển khai một công việc thú vị xung quanh bằng cách sử dụng tệp template.php cho Drupal 6. Giải pháp này có hoạt động với nội dung được tạo bởi các lượt xem không?
dùng5013

@ user5013 Nếu bạn đang suy nghĩ về hiển thị nút hoặc nút đầy đủ trong một chế độ xem, thì nó sẽ hoạt động tốt. Nếu bạn muốn thêm một liên kết vào một khung nhìn, bạn cũng có thể làm điều đó: chỉ cần thay đổi giá trị của 'href'bất cứ thứ gì bạn muốn.

Không, tôi đã suy nghĩ về việc liệu giải pháp này có hoạt động với các trường hiển thị trong một khung nhìn hay không.
dùng5013

@ user5013 À, trong trường hợp đó, không: các liên kết chỉ được thêm khi nút được xây dựng đầy đủ. Mặc dù vậy, nhiều liên kết thường hiển thị trong thanh liên kết có sẵn dưới dạng các trường riêng biệt trong Chế độ xem.

1
Các liên kết @MotoTribe được hiển thị theo cùng thứ tự chúng xuất hiện trong mảng, do đó, chỉ cần thao tác mảng thẳng để thay đổi thứ tự. Đã thêm ví dụ.

1

Giả sử bạn đang nói về các liên kết được kết xuất trên node.tpl.php, bạn sẽ cần triển khai hook_link, ví dụ như nhìn vào node_link . Và nếu bạn chưa quen với hook drupal thì điều này cần phải xảy ra trong một mô-đun tùy chỉnh, vì vậy giả sử tên mô-đun tùy chỉnh của bạn là "foo", bạn sẽ cần phải viết một hàm được gọi là foo_linkcó đối số tương tự như hook_link.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.