2010-12-01 2 views
2

Я хотел бы переопределить функцию comment_save. Есть ли способ переопределить его, чтобы я мог добавить в свою функциональность?как вы переопределите функцию, существующую в другом модуле

Создает спусковой крючок, такой как http://drupal.org/node/375833 лучший способ? Это не кажется очень надежным, поскольку это происходит после факта.

BTW, это в D6.

ответ

5

Это сложно. Во-первых, я бы предложил вместо этого пойти и посмотреть, сможете ли вы управлять тем, что вам нужно, используя hook_comment (http://api.drupal.org/api/drupal/developer--hooks--core.php/function/hook_comment/6). Это действительно больше того, для чего это необходимо.

Если вам действительно нужно переопределить comment_save, то часто хорошим выбором является осмотр того, что его называют. Для этой ситуации вам повезло - comment_save только вызывается в одном месте, в строке 1542 комментария.module, внутри comment_form_submit.

Теперь comment_form_submit - это функция отправки формы - вместо замены comment_save мы можем вместо этого создать собственную версию comment_form_submit (и для аргумента мы предположим, что мы работаем в модуле custom_module) - поэтому я хотел бы создать новую функцию custom_module_comment_form_submit, которая вызывает вариант comment_save, который меня интересует, а затем используйте hook_form_alter() (http://api.drupal.org/api/drupal/developer--hooks--core.php/function/hook_form_alter/6), чтобы установить $ form ['# submit'], чтобы заменить значение 'comment_form_submit' с 'custom_module_comment_form_submit'.

Это не идеально - если вы устанавливаете другой модуль, который использует comment_save, вам нужно будет найти аналогичное обходное решение. И если в Drupal обнаружена ошибка или дыра безопасности, которая исправлена ​​в той части, над которой вы работаете, вы не получите этого исправления безопасности в своем коде. Но если вы абсолютно должны заменить comment_save, это в значительной степени единственный способ сделать это.

2

Вы не можете «переопределить» функцию comment_save, но вы можете реализовать hook_comment в настраиваемом модуле.

См. drupal.org's документация по этой теме.

Два $ опс в вопрос, что было бы удобно для вас будет:

  • «вставить»: Комментарий вставляется.
  • «update»: комментарий обновляется.

Надеется, что это помогает

+0

Согласен. Я хотел бы использовать с помощью hook_comment и hooks вообще, когда вам нужно «переопределить» поведение ядра или других модулей. – 2010-12-01 22:45:18

1

Хотя, конечно, не идеальный, иногда я создал свой собственный модуль с измененной функцией в нем, а затем закомментировал оригинал (и добавил достаточные комментарии, чтобы рассказать другим, почему это было сделано.) Таким образом, если вы забудете и обновите модуль, у которого есть оригинальная функция в нем по дороге, он выкинет ошибку, заявив, что функция уже была объявлена, чтобы повторить оценку или, по крайней мере, повторно прокомментировать ее. Крюки - это, безусловно, лучшая практика, но в крайнем случае это, по крайней мере, дает вам что-то немного лучше, чем собственно редактирование функции в существующем модуле. В некоторых случаях я нашел это необходимым для того, чтобы некоторые модули могли играть вместе.

Смежные вопросы