1

我几乎没有将 php 作为一种语言的经验,并且在生成 Drupal 主题时运行它有点问题。我需要的是执行一次函数,它将返回一个布尔值,然后在整个模板中使用该布尔值。

这是我到目前为止所拥有的:

html.tpl.php->

<?php 

   function testMobile(){
       return false;
   }

   define('isMobile', testMobile());

?>

...

<?php 
    if(!isMobile){
        echo '<h1>NOT MOBILE</h1>';
    }else{
        echo '<h1>IS MOBILE</h1>';
    }
?>

page.tpl.php->

<?php 
   if(!isMobile){
       echo '<h1>IS DESKTOP</h1>';
   }else{
       echo '<h1>NOT DESKTOP</h1>';
   }
?>

在drupal输出中我得到了这个->

NOT MOBILE

NOT DESKTOP

连同此错误消息:

Notice: Use of undefined constant isMobile - assumed 'isMobile' in include() (line 77 of /Users/#/#/#/sites/all/themes/#/templates/page.tpl.php).

我在这里做错了什么?我怎样才能最容易地实现我的目标?

4

2 回答 2

3

似乎定义的变量超出了模板文件的范围。您可以通过使用会话变量来简单地解决这个问题。

下面是一个代码示例...

session_start(); // not necessary with drupal
$_SESSION['isMobile'] = testMobile();

function testMobile(){
   return false;
}

在您的模板中,您可以添加以下...

<?php 
   if(!$_SESSION['isMobile']){
       echo '<h1>IS DESKTOP</h1>';
   }else{
       echo '<h1>NOT DESKTOP</h1>';
   }
?>
于 2013-03-04T18:04:20.680 回答
0

尝试在template.phpin 中定义变量hook_theme_preprocess_page(&$vars, $hook)

所以template.php看起来可以这样:

function testMobile(){
  return false;
}

function YOURTHEME_theme_preprocess_page(&$vars, $hook) {
  $vars['isMobile'] = testMobile();
}

page.tpl.php

<?php 
   if(!$isMobile){
       echo '<h1>IS DESKTOP</h1>';
   }else{
       echo '<h1>NOT DESKTOP</h1>';
   }
?>
于 2013-03-05T11:27:22.257 回答