Различие между реализацией Drupal Hook и регулярной функцией - PullRequest
1 голос
/ 21 февраля 2011

У меня есть пара вопросов по соглашениям о кодировании Drupal, которые я не смог найти в документации или коде.

Помимо знания имени каждого хука в Drupal, есть ли способ отличить функцию, которая реализует хук, от функции, которая просто предоставляет немного функциональности для хука? Или что-то навязывается с помощью кода или какого-то соглашения?

Второй, возможно связанный вопрос. Изучив основные модули, я заметил, что некоторые функции названы с подчеркиванием

function _node_rankings(SelectQueryExtender $query) {
    ...
}

Какое значение придается подчеркиванию? Я предполагаю, что это имитирует «защищенное» соглашение, означающее, что его следует вызывать только из других функций в файле node.module; Тем не менее, я не мог найти ничего, чтобы подтвердить это.

Я знаю о Стандартах кодирования , но они, похоже, нацелены на общий синтаксис PHP, а не на соглашения, нацеленные на внутренние системы Drupal.

Ответы [ 2 ]

3 голосов
/ 21 февраля 2011

Вы правы, префикс подчеркивания в именах функций указывает на то, что он должен рассматриваться как закрытая функция, вызывается только тем модулем, который ее объявил.

Я не знаю, находится ли он вОфициальные документы Drupal, но есть некоторые публикации на drupal.org, подтверждающие это (например, this или this ).

РЕДАКТИРОВАТЬ: и да, это также работает, чтобы избежатьпревращение «нормальной» функции в реализацию ловушек (хотя вы должны стараться не называть функции после существующих ловушек).

2 голосов
/ 21 февраля 2011

В ответ на ваш первый вопрос, если вы посмотрите на код большинства модулей, комментарии выше реализации ловушек, как правило, скажут:

/**
 * Implementation of hook_foo().
 */

Поработав некоторое время с Drupal, вы начнете распознавать наиболее распространенные хуки.

...