Копался тут с разными целями в коде модулей 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
, ссылка на который будет передана хукам, а также любые дополнительные аргументы, которые тоже будут переданы хукам (но не по ссылке).
Есть мнение, очень удобная функция. Взял на вооружение.