Как расширить добавленный модуль в Drupal? - PullRequest
6 голосов
/ 27 октября 2009

Как я могу расширить существующий модуль, не изменяя его? На самом деле это готовый модуль, так что я не хочу его взламывать. Но я хочу изменить и добавить некоторые функции к нему. Я новичок в Drupal и, читая учебники об этом, я продолжаю слышать одно снова и снова: не взламывайте ядро ​​... и я верю, что то же самое относится и к модулям.

Ответы [ 5 ]

7 голосов
/ 28 октября 2009

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

Лучшие решения:

  1. Используйте любой API, предоставляемый модулем. Иногда есть функции, которые вы можете использовать как вызовы API, которые не обязательно предназначены для этого.
  2. Создайте дополнительную функциональность и отправьте исправление в очередь выдачи модуля, чтобы другие могли получить выгоду от вашей работы, и чтобы вы могли извлечь выгоду из аудитов безопасности без особых хлопот.
  3. Не всегда, но часто вы можете пойти далеко, создав собственный модуль, который реализует hook_form_alter и добавляет обработчик отправки, который возвращает ваш модуль для обработки.
6 голосов
/ 26 декабря 2013

Нашел очень хороший пост о расширении модуля в drupal. Основные части:

  • Если модуль использует код для обратного вызова страницы, который вы хотите изменить, измените обратный вызов страницы с помощью hook_menu_alter ().

  • Если модуль реализует функцию темы, которую вы хотите изменить, измените функцию, связанную с hook_theme_registry_alter (). В качестве альтернативы, если достаточно изменить переменные, которые получает функция темы, вы можете реализовать функцию предварительной обработки для этой функции темы (например, hook_preprocess_rdf_metadata () для theme_rdf_metadata (), и изменить переменные, которые получит функция темы.

  • Если модуль выполняет запрос SQL с помощью db_select () и назначает тег запросу, измените выполненный запрос с помощью hook_query_alter ().

  • Если модуль реализует ловушку, которую вы не хотите, чтобы она выполнялась, вы можете реализовать hook_module_implements_alter (), чтобы избежать ее выполнения.

  • Если в модуле реализован хук alter (например, hook_page_alter ()), и вы хотите изменить то, что изменил этот хук, реализуйте тот же хук alter, убедившись, что он выполняется после того, который реализован из этого модуля.

Если функция, которую вы хотите изменить, не является ловушкой, то:

  • Убедитесь, что функция использует хуки, реализованные из другого модуля. Например, node_save () вызывает hook_node_presave (); если я захочу изменить свойство «change» узла, я не взламываю node_save (), а скорее использую hook_node_presave (), чтобы изменить его.

  • Убедитесь, что на функцию ссылаются / используют с крючка; в этом случае вы можете сделать что-то для этого хука, как я ранее описал.

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

Подробнее о расширении существующего модуля путем создания нового можно найти в этом простом примере здесь .

2 голосов
/ 27 октября 2009

Что это за модуль? Некоторые модули предоставляют API, которые вы можете расширить, написав свой собственный модуль. Существует тонн модулей, которые «расширяют» представления путем построения API представлений . Если модуль, который вы хотите расширить, не имеет хорошего API, вы всегда можете его разветвить, чтобы сделать версию, соответствующую вашим потребностям. Может быть, это поможет кому-то еще.

1 голос
/ 10 февраля 2011

Даже если нам нужно использовать некоторые функции, мы можем сделать это следующим образом. Нам нужно скопировать функцию из модуля, и мы можем вставить функцию в ваш файл template.php. Чем вы можете соответственно изменить настройки этой функции.

0 голосов
/ 17 декабря 2009

Чтобы изменить форму, отображаемую модулем, вы можете просто создать модуль, который реализует hook_form_alter() или hook_form_FORM_ID_alter(). В большинстве случаев, когда вы хотите изменить поведение модуля, вам также необходимо изменить форму настроек, которую он использует (или любую другую форму, которую он использует, если это так).

...