Як програмно додати посилання до змінної посилань


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

Drupal 7

У Drupal 7 це трохи простіше, оскільки теми можуть реалізовувати змінити гачки. Ви шукаєте гачок для зміни 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файлі.


Дякую, саме це я шукав! Ви врятували мене від здійснення цікавої розробки за допомогою файлу template.php для Drupal 6. Чи це рішення працюватиме із вмістом, створеним переглядами?
user5013

@ user5013 Якщо ви думаєте про повне відображення вузла чи тизера у вікні, це повинно вийти з поля. Якщо ви хочете додати посилання до представлення даних, ви можете зробити і це: просто змініть значення 'href'на те, що ви хочете.

Ні, я не замислювався над тим, чи буде це рішення працювати з відображенням полів у поданому вигляді.
user5013

@ user5013 Ага, тоді в цьому випадку ні: посилання додаються лише тоді, коли вузол повністю побудований. Багато посилань, які зазвичай відображаються на панелі посилань, доступні як окремі поля у вікнах Перегляди.

1
Посилання @MotoTribe надаються в тому ж порядку, в якому вони відображаються в масиві, так що це просто маніпулювання масивом для зміни порядку. Додано приклади.

1

Якщо припустити, що ви говорите про посилання, які відображаються на node.tpl.php, вам потрібно буде реалізувати прив'язку_підключення, наприклад, подивіться на node_link . А якщо ви новачок у гачках для друпалів, то це має відбуватися у спеціальному модулі, тому скажімо, що назва вашого модуля "foo", вам потрібно буде написати функцію, foo_linkяка називається, яка повинна мати ті ж аргументи, що і прив'язка_посилання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.