条件付きロジックを使用して、ノードIDに基づいてpage.tpl.phpにを表示しないにはどうすればよいですか?
質問
パネルの「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を表示するときに左側のサイドバーを隠そうとしている場合、これは正しい方法ではありません。左サイドバーのブロックのブロック可視性設定を編集して、パスが「ノード/51」のときに隠されます。次に、テンプレートでこれを行うことができます。
<?php
if ($left) {
print '<div id="left">' . $left . '</div>';
}
?>
これにより、左側のサイドバーにブロックがない場合、Div#全体が左全体が非表示になります。
他のヒント
左サイドバーに示されているすべてのブロックの可視性設定を変更することは、左サイドバーを隠す正しい方法だと思います。
何らかの理由で、コードから左サイドバーを隠す必要がある場合(たとえば、現在のショーページの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'] = '';
// …
}
// …
}
フックは、より複雑な条件が検証されていることを確認できます。一部のノードフィールドには特定の値があることを確認するなど、ブロックの可視性設定を変更するときは不可能です。 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. */