如何使用条件逻辑在基于节点ID中不显示
题
我正在使用一个主题,该主题不受面板的“禁用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. */
不隶属于 drupal.stackexchange