特定の地域でのみコンテンツが表示されるページがあります。設定されている州以外の別の州からこのページにアクセスした場合、hook_node_view
。しかし、このページのコンテンツ領域でブロックが有効になっています。ブロックの内容を無効にする方法はありますか?私は試した hook__block_view
およびhook__block_view_alter
が機能しませんでした。誰かが私を助けてくれますか?
あなたは試すことができます hook_block_list_alter
特定のブロックを非表示にします。
レンダリングする前にブロックを操作します。
このフックを使用すると、ブロックリストのブロックを追加、削除、または変更できます。ブロックリストには、レンダリングされたブロックではなく、ブロック定義が含まれています。モジュールがブロックリストを操作する機会を得た後に、ブロックがレンダリングされます。
この質問はかなり古いですが、未回答なので、記録のために返答します。
Drupalを標準のインストールプロファイルでインストールすると、一部のブロック(検索、ログイン、ナビゲーションなど)が自動的に有効になります。
したがって、 profiles/standard/standard.install を確認すると、ブロックがdbクエリで有効になっており、テーマに関連していることがわかります。
したがって、ブロックを無効にすることは単なる更新クエリです。
db_update('block')
->fields([
'status' => 0,
])
->condition('theme', 'your_theme')
->condition('module', 'the_module_providing_the_block')
->condition('delta', 'the_block_delta')
->execute()
;
その後、キャッシュをクリアする必要があるかもしれません。
この場合の忍者ソリューションは hook_page_alter になります。また、 hook_block_view_alter は有効なフックであるため、機能させることができない理由はわかりません。
ブロックがビューからのものである場合、追加の設定やコーディングをせずに、いくつかのトリッキーな引数を設定してブロックを非表示にすることができます。
また、ブロックごとの可視性設定をphpコードとして設定できます。