Студия разработки сайтов и приложений

Netspark.ru

Хуки и drupal_alter

Копался тут с разными целями в коде модулей Organic Groups и вдруг обнаружил неведомую мне раньше функцию drupal_alter(). Для примера приведу порезанный фрагмент кода, генерирующего блок информации о группе (из функции og_block_details()):

$links['invite'] = l(t('Invite friend'), "og/invite/$node->nid");
$links['subscribers'] = $txt;
$links['manager'] = t('Manager: !name', array('!name' => theme('username', $node)));
$links['my_membership'] = $subscribe;
$links['must_login'] = t('You must login in order to post into this group.', array('!login' => url("user/login", array('query' => $dest))));
$links['closed'] = t('This is a closed group. The group administrators add/remove members as needed.');
// Modify these links by reference. If you want control of the whole block, see og_block_details().
drupal_alter('og_links', $links, $node);

Так что же делает функция drupal_alter()? Она передает ссылку на $links всем функциям-хукам, поименованным по правилам имямодуля_og_links_alter для изменений. То есть фактически, это механизм быстрого создания произвольных хуков для модификации произвольных данных. И чтобы изменить массив $links мне достаточно написать хук mymodule_og_og_links_alter(&$links, $node) и в нем делать с массивом все что угодно.

Функция drupal_alter() в качестве аргументов принимает название хука (часть 'og_links'), массив или объект $data, ссылка на который будет передана хукам, а также любые дополнительные аргументы, которые тоже будут переданы хукам (но не по ссылке).

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

Комментарии