프로그래밍 방식으로 링크 변수에 링크를 추가하는 방법


8

Drupal 6을 사용 $links하고 있으며 프로그래밍 방식으로 다른 링크를 포함 하도록 변수를 수정하고 싶습니다 . 나는 이것을 소용없이 사용하는 방법에 대해 Google에서 높고 낮게 검색했습니다. 누군가 이것을하는 방법을 알고 있습니까?

답변:


22

드루팔 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;
}

드루팔 7

Drupal 7에서는 테마가 변경 후크를 구현할 수 있으므로 좀 더 간단합니다. 찾고있는 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

@ user5013 전체 노드 또는 티저 디스플레이에 대해 생각하고 있다면 즉시 사용할 수 있습니다. 뷰에 링크를 추가하고 싶다면 그렇게 할 수도 있습니다 'href'. 원하는 값으로 값을 변경하면 됩니다.

이 솔루션이 필드 표시와 함께 작동하는지 여부를 생각하지 않았습니다.
user5013

@ user5013 Ah,이 경우 아니요 : 노드가 완전히 구축 된 경우에만 링크가 추가됩니다. 링크 모음에 일반적으로 표시되는 많은 링크는보기에서 별도의 필드로 사용할 수 있습니다.

1
@MotoTribe 링크는 배열에 나타나는 순서와 동일한 순서로 렌더링되므로 순서를 변경하는 것은 바로 배열 조작입니다. 예제가 추가되었습니다.

1

당신이 node.tpl.php에 렌더링 얻을 링크에 대해 얘기 가정하면, 구현해야합니다 hook_link 의 예를 들어보기를위한 node_link을 . 그리고 drupal hooks를 처음 사용한다면 이것은 커스텀 모듈에서 발생해야하므로 커스텀 모듈 이름이 "foo"라고 foo_link말하면 hook_link와 같은 인수를 가져야 하는 함수를 작성해야합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.