Кажется, я не могу переопределить функцию с помощью template.php

Я пытаюсь изменить ссылки на комментарии в моем выводе Drupal, и я думаю, что нашел функцию, на которую хочу повлиять, а именно function comment_node_view($node, $view_mode).

Он находится в модуле комментариев. Проблема в том, что я не могу повлиять на это, когда я пытаюсь переопределить его, помещая его в свой файл Template.php и добавляя мою тему_ к имени функции? В моем template.php теперь это выглядит так:

function themename_comment_node_view($node, $view_mode)

если я сниму themename_, появится сообщение о том, что я не могу повторно объявить его. Я могу скопировать модуль комментариев и отредактировать его напрямую, но я думал, что именно так я что-то оформляю?


person Purplemonkey    schedule 18.08.2011    source источник


Ответы (2)


Темы Drupal могут реализовывать только функции темы (которые включают функции предварительной обработки и обработки шаблонов) или alter hooks.

comment_node_view () - это перехватчик, но это не перехватчик alter (иначе имя перехватчика заканчивалось бы на "_alter").

Почему темы не могут реализовывать hook_node_view()?

Поскольку hook_node_view() вызывается в comment_build_comment () используя следующий код:

  // Allow modules to make their own additions to the comment.
  module_invoke_all('comment_view', $comment, $view_mode, $langcode);
  module_invoke_all('entity_view', $comment, 'comment', $view_mode, $langcode);

Как также подчеркивается в комментарии, module_invoke_all () вызывает хуки, реализованные в модулях, а не в темах.

Если вы хотите изменить способ отображения комментария из темы, вы должны создать comment.tpl.php для вашей темы.

person apaderno    schedule 20.08.2011
comment
Я боюсь, что не следую твоему совету. это, скорее всего, не ваше понимание, а мое. Я пытаюсь изменить функцию, но если я не могу добавить свою версию этой функции, могу ли я редактировать модуль напрямую? - person Purplemonkey; 25.08.2011
comment
comment_node_view() не является функцией темы, потому что имя функции должно начинаться с theme_, и это не функция изменения ловушки, или имя функции должно заканчиваться на _alter. Следовательно, вы не можете реализовать themename_node_view() в теме. themename_comment_node_view() для Drupal не является специальной функцией и не вызывает ее автоматически; это даже не ловушка для Drupal. - person apaderno; 25.08.2011
comment
Нет необходимости редактировать основной модуль Drupal, что никогда не рекомендуется делать. Вам просто нужно добавить файл шаблона comment.tpl.php в свою тему, если вам просто нужно изменить способ отображения комментария, когда выбранная тема - это та, которую вы написали. - person apaderno; 25.08.2011

Расстояние между именами - 'hook_node_view', поэтому вам нужно заменить 'comment' (интервал между именами, используемый модулем комментариев) на имя вашей темы:

function mytheme_node_view($node, $view_node)

Хуки:
http://api.drupal.org/api/drupal/includes--module.inc/group/hooks/7.

hook_node_view:
http://api.drupal.org/api/drupal/modules--node--node.api.php/function/hook_node_view/7

Надеюсь, это поможет :)

person Rimian    schedule 18.08.2011
comment
Спасибо, это действительно имеет смысл. но, к сожалению, у меня это не работает. Я реализовал это, но моя новая версия все еще игнорируется. Я успешно переопределяю другую функцию, которая является функцией mytheme_menu_link (array $ variables), поэтому я предполагаю, что с моим файлом template.php все в порядке ... есть идея? - person Purplemonkey; 18.08.2011