Como adicionar programaticamente links à variável links

8

Estou usando o Drupal 6 e gostaria de modificar a $linksvariável para incluir outros links programaticamente. Eu pesquisei alto e baixo no Google sobre como fazer isso sem sucesso. Alguém sabe como fazer isso?

user5013
fonte

Respostas:

22

Drupal 6

No Drupal 6, você não pode usar ganchos ou alterá-los dentro de temas, portanto, você precisará criar um módulo personalizado para modificar os links. Depois de concluído, você desejará implementar hook_link()(se estiver criando um novo link) ou hook_link_alter()(se desejar modificar um link existente).

Adicionando um novo link:

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

Modificando links existentes:

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

No Drupal 7, isso é um pouco mais direto, pois os temas podem implementar alter hooks. O alter hook que você está procurando é 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;
}

Você pode colocar isso diretamente no seu template.phparquivo.


fonte
Obrigado, é exatamente isso que eu estava procurando! Você me salvou de implementar uma solução interessante usando o arquivo template.php do Drupal 6. Essa solução funcionaria com o conteúdo gerado pelas visualizações?
precisa saber é o seguinte
@ user5013 Se você está pensando no nó completo ou na exibição de teaser em uma exibição, ele deve funcionar imediatamente. Se você deseja adicionar um link a uma visualização, também pode fazer isso: basta alterar o valor 'href'para o que quiser.
Não, eu estava pensando se essa solução funcionaria com os campos exibidos em uma exibição.
precisa saber é o seguinte
@ user5013 Ah, nesse caso, não: os links são adicionados apenas quando o nó está totalmente construído. Muitos dos links que geralmente aparecem na barra de links estão disponíveis como campos separados no Views.
11
Os links do @MotoTribe são renderizados na mesma ordem em que aparecem na matriz, portanto, é apenas uma manipulação direta da matriz alterar a ordem. Exemplos adicionados.
1

Supondo que você esteja falando de links que são renderizados no node.tpl.php, será necessário implementar o hook_link, por exemplo, observe o node_link . E se você é novo no drupal hooks, isso precisa acontecer em um módulo personalizado, então digamos que seu nome de módulo personalizado seja "foo", você precisará escrever uma função chamada foo_linkque deve ter os mesmos argumentos que o hook_link.

Dipen
fonte