Drupal:page.tpl.php的If语句(取决于页面部分)

Drupal:page.tpl.php的If语句(取决于页面部分),php,class,drupal,if-statement,Php,Class,Drupal,If Statement,我想使用if语句选择包含的特定页面,并仅为这些页面输出自定义内容 我的PHP不是很好,我希望这是一个非常简单的任务。有人能给我一个提示吗?我会研究类似模块的上下文或面板来实现这一点-从长远来看,这比编码更好。我不会检查是否存在某个body类。这些类只是其他if-else逻辑的结果,它们很容易被重写或更改,从而破坏页面模板。最好检查这些类所基于的值。如果我是你,我会尝试弄清楚这个body类是如何生成的,并重用这些代码 例如,如果主题的template.php执行以下操作: $body_classe

我想使用if语句选择包含
的特定页面,并仅为这些页面输出自定义内容


我的PHP不是很好,我希望这是一个非常简单的任务。有人能给我一个提示吗?

我会研究类似模块的上下文或面板来实现这一点-从长远来看,这比编码更好。

我不会检查是否存在某个body类。这些类只是其他if-else逻辑的结果,它们很容易被重写或更改,从而破坏页面模板。最好检查这些类所基于的值。如果我是你,我会尝试弄清楚这个body类是如何生成的,并重用这些代码

例如,如果主题的template.php执行以下操作:

$body_classes[] = 'section-' . form_clean_id(arg(0));
然后我会把它放在我的template.php中:

<?php if (form_clean_id(arg(0)) == 'category'): ?>
  // Do fancy stuff!
<?php endif; ?>
function YOURTHEME_preprocess_page(&$vars) { //Many themes already have this function implemented
  if (stripos($vars['foo-bar'], 'section')) {
    $vars['is_section'] = TRUE;
  }
  else {
    $vars['is_section'] = FALSE;
  }
}

//做些花哨的事!

听起来您希望在某些页面上使用一个标志;一个你可以在你的主题中读出并付诸行动的主题

在template.php中:

<?php if (form_clean_id(arg(0)) == 'category'): ?>
  // Do fancy stuff!
<?php endif; ?>
function YOURTHEME_preprocess_page(&$vars) { //Many themes already have this function implemented
  if (stripos($vars['foo-bar'], 'section')) {
    $vars['is_section'] = TRUE;
  }
  else {
    $vars['is_section'] = FALSE;
  }
}
然后在您的page.tpl.php中

<?php if ($is_section): ?>
    <p>I am in a section</p>
<?php endif; ?>

我在一个部门

这样,您就可以将逻辑保持在它所属的位置:在预处理器中。而且您将逻辑排除在模板之外,因为它肯定不属于模板!
if(stripos($vars['foo-bar','section')){
很可能变得更加智能,如果您在那里执行
var\u转储($vars)
,所有可用变量都将转储到您的屏幕(浏览器)上。我相信您会找到一个可以对照检查的变量,该变量的“模糊性”比body类小。毕竟:该类仅用于一件事:作为body标记中的类。而不是用于检查您是否在某个部分中。
那里也有完整的Drupal,因此您甚至可以使用任何功能(例如,节)模块提供。

Hi Berkes。我将代码粘贴到我的template.php文件中,并将YOURTHEME更改为我的主题名。我还将“foo bar”替换为“category”,这是我要标记的部分。清除缓存和刷新后,我得到一个空白页。你知道为什么吗?我还尝试使用phptemplate代替YOURTHEME。顺便说一下,我使用Zen的STARTERKIT主题。代码是伪代码。不是要复制粘贴到工作环境中,而是作为编写自己代码的指南。我在该代码中已经看到至少两个错误(复制粘贴陷阱:))谢谢你的提示。页面是由panels模块创建的。那么你知道如何从中获取代码吗?这里是确切的body标记:它是一个panels页面,并不意味着body类是由panels添加的。body类通常是由page.tpl.php模板的预处理函数添加的,即。
function[module or theme name]\u preprocess\u page(&$variables){}
。Drupal默认情况下会在
template\u preprocess\u page()
中添加两个类。其他类通常由主题的预处理函数(例如
yourtheme\u preprocess\u page()
)和基本主题(如果使用,例如
zen\u preprocess\u page()添加)
)。