У меня было похожее требование при внедрении рекламного сервера (DFP).Мое решение состояло в том, чтобы определить массив как глобальную переменную и включить php-код в каждый блок рекламного блока, который добавил новый элемент в массив.
Затем, когда все блоки на странице были выполнены, вы можетепросто получите доступ к глобальной переменной, чтобы увидеть, какие рекламные блоки были вызваны.Поскольку код для построения списка вызываемых блоков является частью каждого блока, не имеет значения, отображаются ли блоки в регионе, на панели или где-либо еще.
В моем случае я хотел использовать информацию для добавления сценариев в раздел <head>
, которые ссылаются только на дополнительные модули из размещаемых блоков.Мое полное решение было следующим:
1) Реализовать ловушку init для создания глобальной переменной, в которой будет храниться информация о том, какие блоки отображаются (необходимо создать пользовательский модуль, содержащий этот код):
YOURMODULE_custom_init() {
$GLOBALS['dfp-ads'] = array();
}
2) Включить основной модуль php
3) Добавить код php в конце каждого рекламного блока, чтобы добавить строку в массив, созданный на шаге 1
<?php
$GLOBALS['dfp-ads']['AD_OR_BLOCK_NAME_GOES_HERE']="AD SPECIFIC SCRIPT GOES HERE";
?>
4) Реализовать THEME_preprocess_html в моем файле template.php для доступа к глобальной переменной, построить скрипт и добавить скрипт в раздел <head>
с вызовом drupal_add_html_head
function YOURTHEME_preprocess_html(&$vars) {
$inline_script = LOGIC TO ACCESS $GLOBALS['dfp-ads'] AND BUILD SCRIPT GOES HERE;
$element = array(
'#type' => 'markup',
'#markup' => $inline_script,
);
drupal_add_html_head($element, 'google-dfp');
}
Звучит из вашего описаниячто вам не нужен список рекламных блоков для создания javascript для раздела head, но вместо этого вы хотите использовать эту информацию для изменения содержимого самих блоков.
В этом случае вместо THEME_preprocess_html вы можете попробовать hook_page_alter (& page) Страница API для этого хука утверждает, что на отдельные "блоки" может ссылаться их пара модуль / дельта в пределах региона:"
// The login block in the first sidebar region.
$page['sidebar_first']['user_login']['#block'];
Надеюсь, это кому-нибудь поможет!