我正在使用一个主题,该主题不受面板的“禁用Drupal块/区域”设置的支持。我试图在PHP中删除使用IF语句,但是我的PHP语法是错误的,或者我不使用正确的Drupal变量。现在,本节看起来像这样:

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

我有一种感觉,我并没有在PHP中正确嵌套第二个语句。

有帮助吗?

解决方案

如果您在查看节点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'] = '';
    // …
  }
  // …
}

挂钩可以检查更复杂的条件,包括验证某些节点字段是否具有特定值,在更改块可见性设置时是不可能的,如果不编写随后传递给的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. */
许可以下: CC-BY-SA归因
scroll top