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ステートメントを正しくネストしていないような気がします。
ノード51を表示しているときに左側のサイドバーを非表示にしようとしている場合、これは正しい方法ではありません。左側のサイドバーにあるブロックのブロック表示設定を編集して、パスが「node/51」のときに非表示になるようにします。次に、テンプレートでこれを行うことができます:
<?php
if ($left) {
print '<div id="left">' . $left . '</div>';
}
?>
左側のサイドバーにブロックがない場合は、div#left全体が非表示になります。
左側のサイドバーに表示されているすべてのブロックの表示設定を変更することは、左側のサイドバーを非表示にする正しい方法だと思います。
何らかの理由で、左サイドバーをコードから非表示にする必要がある場合(たとえば、現在表示されているページの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. */
_