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

drupal.stackexchange https://drupal.stackexchange.com/questions/802

  •  16-10-2019
  •  | 
  •  

質問

パネルの「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. */
ライセンス: CC-BY-SA帰属
所属していません drupal.stackexchange
scroll top