私はDrupal 6他の人が作ったサイトに取り組んでおり、私の言語だけのためにホームページ上のいくつかのブロックを削除する必要があります。
Context を使用しようとしています。hook_context_init()
を使用して、コンテキストがアクティブかどうかを確認し、不要なブロックを削除します。
しかし、問題があります:フック関数でブロックを削除するにはどうすればよいですか?
私の質問が明確であることを望みます。
ダーティーマークアップのため、CSSでブロックを非表示にしたくありません。
[解決済み]私は次のような前処理を行いました:
function wfp_homepage_context_preprocess_block(&$vars, $hook) {
$to_delete = array('block_delta_1', 'block_delta_2')
if(in_array($vars['block']->delta , $to_delete)){
$vars['template_files'][0] = 'block-empty';
}
}
空のblock-empty.tpl.phpをテーマに追加します。
[解決済み]私は次のような前処理を行いました:
function module_preprocess_block(&$vars, $hook) {
$to_delete = array('block_delta_1', 'block_delta_2')
if(in_array($vars['block']->delta , $to_delete)){
$vars['template_files'][0] = 'block-empty';
}
}
空のblock-empty.tpl.phpをテーマに追加します。
hook_page_alter()
を使用してこれを行うことができます。たとえば、「sidebar_first」リージョンからシステムナビゲーションブロックを削除する場合は、次のようにします。
function MYMODULE_page_alter(&$page) {
if ($my_condition) {
$region_name = 'sidebar_first';
$block_name = 'system_navigation';
if (isset($page[$region_name][$block_name])) {
$page[$region_name][$block_name]['#access'] = FALSE;
}
}
}
D6でこれを行う簡単な方法はないようです。 i18n国際化モジュールを使用している場合は、ブロック構成メニューの例外として、言語コードを前に付加したパスを定義できます。スペイン語ではes/*のようなものです。
自分自身を試していない、ただの考え。
あなたが探しているフックは hook_block_view_alter()
または delta cousin です。
$module['delta']
をチェックして、それが気になるブロックであるかどうかを確認し、$block
の件名と内容の設定を解除します。