Programsal olarak links değişkenine bağlantılar nasıl eklenir


8

Drupal 6 kullanıyorum ve $linksdiğer bağlantıları programlı olarak dahil etmek için değişkeni değiştirmek istiyorum . Google'da bunun nasıl yapılacağı konusunda yüksek ve düşük arama yaptım. Birisi bunu nasıl yapacağını biliyor mu?

Yanıtlar:


22

Drupal 6

Drupal 6'da temaların içinde kancaları kullanamaz veya kancaları değiştiremezsiniz, bu nedenle bağlantıları değiştirmek için özel bir modül oluşturmanız gerekir . İşiniz bittiğinde hook_link()(yeni bir bağlantı oluşturuyorsanız) veya hook_link_alter()(mevcut bir bağlantıyı değiştirmek istiyorsanız) uygulamak istersiniz.

Yeni bir bağlantı ekleme:

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

Mevcut bağlantıları değiştirme:

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'de, temalar alter kancalarını uygulayabildiğinden, bu biraz daha basittir. Aradığınız alter kancası 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;
}

Bunu doğrudan template.phpdosyanıza yerleştirebilirsiniz.


Teşekkürler, tam olarak aradığım şey bu! Beni Drupal 6 için template.php dosyasını kullanarak ilginç bir çalışma uygulamaktan kurtardın. Bu çözüm, görünümler tarafından oluşturulan içerikle çalışır mı?
user5013 16:12

@ user5013 Bir görünümdeki tam düğüm veya teaser ekranını düşünüyorsanız, kutunun dışında çalışmalıdır. Bir görünüme bağlantı eklemek istiyorsanız, bunu da yapabilirsiniz: değerini 'href'istediğiniz gibi değiştirin.

Hayır, bu çözümün bir görüntüdeki alanlar ile çalışıp çalışmayacağını düşünüyordum.
user5013

@ user5013 Ah, o zaman bu durumda, hayır: bağlantılar yalnızca düğüm tamamen oluşturulduğunda eklenir. Bağlantı çubuğunda genellikle görünen bağlantıların çoğu Görünümler'de ayrı alanlar olarak kullanılabilir.

1
@MotoTribe bağlantıları dizide göründükleri sırayla oluşturulur, bu nedenle sırayı değiştirmek için sadece düz dizi manipülasyonu yapılır. Eklenen örnekler.

1

Node.tpl.php üzerinde oluşturulan bağlantılar hakkında konuştuğunuzu varsayarsak, örneğin hook_link uygulamanız gerekir , örneğin node_link'e bakın . Ve eğer drupal kancalarda yeniyseniz, bu özel bir modülde gerçekleşmelidir, bu yüzden özel modül adınızın "foo" olduğunu foo_linkvarsayalım, hook_link ile aynı argümanlara sahip olması gereken bir işlev yazmanız gerekir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.