アドサーバー (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";
?>
<head>
4) template.php ファイルに THEME_preprocess_html を実装して、グローバル変数にアクセスし、スクリプトを作成し、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 を作成するために広告ブロックのリストは必要なく、その情報を使用してブロック自体の内容を変更したいと思われます。
その場合、THEME_preprocess_html の代わりに、hook_page_alter(&page)を試すことができ
ます。そのフックの API ページには、個々の「ブロックは、リージョン内のモジュール/デルタ ペアによって参照される可能性がある」と記載されています。
// The login block in the first sidebar region.
$page['sidebar_first']['user_login']['#block'];
それが誰かを助けることを願っています!