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

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, ссылка на который будет передана хукам, а также любые дополнительные аргументы, которые тоже будут переданы хукам (но не по ссылке).

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

Обсуждение

Чтобы обсудить заметку, написать комментарий, или просто связаться, заходите в Телеграм-канал. У нас весело и всем рады!

Также меня можно найти в Хвиттере, VC.ru, Дзене, или Тенчате.