web-dev-qa-db-ja.com

特定のノードからリージョンを非表示にしますか? (CSSなし)

CSSを介して特定のノードから領域を非表示にすることはできますが、これはDisplay: none属性は実際にはスペースをクリアしません...他の方法はありますか?

1
JohnDoea

hook_page_alter 経由でやってみてください

ページがレンダリングされる前に変更を実行します。

このフックは、ページレベルで要素を削除または変更する場合、または他のモジュールの要素に依存するページレベルで要素を追加する場合に使用します(このフックはhook_page_build()の後に実行されます)。

次に、パラメータなしで menu_get_object を呼び出して、現在のページを取得し、返されたノードオブジェクトを検査できます。

このコードをテーマのtemplate.phpファイルに追加します。

function MYTHEME_page_alter(&$page){
  //dpm($page);
  if ($node = menu_get_object()) {
    if ($node->nid == 72) { // pick your node or add a condition to your liking
      // remove sidebar first region
      unset($page['sidebar_first']); // remove the regeion here
    }
  }
}

テーマがそれに依存している場合、および削除するリージョンに応じて、template_preprocess_htmlも実装し、ボディクラスが同期するように調整する必要があります。

CSSに関しては、dispay:noneは、cssルールとして要素を表示から削除する必要がありますが、visibility:hiddenは要素を非表示にしますが、それでも以前と同じスペースを占有します。 CSSの表示と可視性

3
J. Reynolds