web-dev-qa-db-ja.com

前処理でブロックを削除する

私は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をテーマに追加します。

1
Shyghar

[解決済み]私は次のような前処理を行いました:

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をテーマに追加します。

3
Shyghar

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;
    }
  }
}
3
Clive

D6でこれを行う簡単な方法はないようです。 i18n国際化モジュールを使用している場合は、ブロック構成メニューの例外として、言語コードを前に付加したパスを定義できます。スペイン語ではes/*のようなものです。

自分自身を試していない、ただの考え。

0
user1496391

あなたが探しているフックは hook_block_view_alter() または delta cousin です。

$module['delta']をチェックして、それが気になるブロックであるかどうかを確認し、$blockの件名と内容の設定を解除します。

0
paul-m