Суть прямо в сабже.
Юзаю hook_block_view_alter() и собственно получаю что хочу - доступ к блокам. Цель проста - мне необходимо добавить дополнительный контент к блоку, но чтобы он не был доступен из интерфейса, чтобы клиенты чего не натворили и вообще там php (если бы точным, ниже блока цепляется формочка подписки entityform).
function MYMODULE_block_view_alter(&$data, $block) {
if ($block->module == 'block' && $block->delta == 3) {
$data['content'] .= 'my additional content';
}
}
Всё работает шикарно, но сайт мультиязычный и на втором языке оно уже перестает работать. Используется i18n для перевода блока, перевод сделан, но хук в dpm() отдает данные оригинального блока, даже если дебажить на языке где он не добавляется, в $data лежит инфа на русском (оригинальном) языке.
Собственно как их подружить? Я догадываюсь что i18n перевод хранит отдельно от основного значения в виде строки и где-то подсовывает его, не удивлюсь если в этом же хуке и меняет значение на иной перевод. Как мне их подружить, может у i18n есть свой хук для этого?
Ответы
Спасибо, xandeadx, увеличил вес своему кастому - помогло.
i18n_block по умолчанию имеет вес равный 100. Сделал своему 101 и заработало.
Можно в табличке system руками поправить, либо в MYMODULE.install файле добавить это при включении.
/**
* Implements hook_install().
*/
function MYMODULE_install() {
db_update('system')
->fields(array('weight' => WEIGHT))
->condition('name', 'MYMODULE', '=')
->execute();
}
Спасибо за наводку.
http://www.drupalcontrib.org/api/drupal/contributions!i18n!i18n_block!i1...
Полагаю надо просто сделать вес модуля больше чем у i18n_block, чтобы MYMODULE_block_view_alter отрабатывал после локализации