как переопределить функцию, которая существует в другом модуле - PullRequest
2 голосов
/ 02 декабря 2010

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

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

Кстати, это в D6.

Ответы [ 3 ]

5 голосов
/ 02 декабря 2010

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

Если вам действительно необходимо переопределить комментарий_сохранения, то часто хорошим выбором будет посмотреть, как это называется. В этой ситуации вам повезло - comment_save вызывается только в одном месте, в строке 1542 файла comment.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 голосов
/ 02 декабря 2010

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

См. документацию drupal.org по теме.

Два вопроса $ ops, которые вам пригодятся, будут:

  • "insert": комментарий вставляется.
  • "update": комментарий обновляется.

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

1 голос
/ 13 сентября 2012

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

...