web-dev-qa-db-ja.com

条件付きロジックを使用して、ノードIDに基づいてpage.tpl.phpに<div>を表示しないようにするにはどうすればよいですか?

Panelsの "Disable Drupal blocks/regions"設定でサポートされていない領域があるテーマを使用しています。PHPでifステートメントを使用して削除しようとしましたが、私の= PHP構文が間違っているか、正しいDrupal変数を使用していません。現在、セクションは次のようになっています。

<?php
    if ($node->nid != 51) {
        echo '<div id="left">';
            { if ($left) { print $left;}
        echo '</div>';
 ?>

PHPでも、2番目のifステートメントを正しくネストしていないような気がします。

3
Jay

ノード51を表示しているときに左側のサイドバーを非表示にしようとしている場合、これは正しい方法ではありません。左側のサイドバーにあるブロックのブロック表示設定を編集して、パスが「node/51」のときに非表示になるようにします。次に、テンプレートでこれを行うことができます:

<?php
  if ($left) {
    print '<div id="left">' . $left . '</div>';
  }
?>

左側のサイドバーにブロックがない場合は、div#left全体が非表示になります。

8
marcvangend

左側のサイドバーに表示されているすべてのブロックの表示設定を変更することは、左側のサイドバーを非表示にする正しい方法だと思います。
何らかの理由で、左サイドバーをコードから非表示にする必要がある場合(たとえば、現在表示されているページのURLではない特定の条件で左サイドバーを非表示にする必要があるため)、次にできるのは、ページテンプレートがレンダリングされる前に呼び出されるhook_preprocess_page()を実装することです。そのフックは、ページテンプレートに渡されるすべての変数を変更できます。

_function mymodule_preprocess_page(&$variables) {
  if (isset($variables['node']) && $variables['node']->nid == 51) {
    // The left sidebar will not be shown.
    $variables['left'] = '';
    // …
  }
  // …
}
_

フックは、より複雑な条件を確認できます。たとえば、一部のノードフィールドに特定の値があることを確認します。これは、PHPコードを書き込んでいない場合、ブロックの表示設定を変更するときに不可能です。 eval()ブロックモジュールから(そのような場合は、そのコードをカスタムモジュールに配置することをお勧めします)。

構文エラーが発生する理由は、コードに閉じ括弧と一致しない中括弧が含まれており、閉じ括弧が欠落しているためです。

_if ($node->nid != 51) {
  echo '<div id="left">';
    /* This bracket is extra. -> */ { if ($left) { print $left;}
  echo '</div>';
} /* <- This bracket is missing in the code you reported. */
_
3
kiamlaluno