如何有效地加载模板中的页面

时间:2014-09-27 17:59:05

标签: php html

我已经从书中做了一个测试数据库" PHP和mySQL新手到Ninja" ...现在我正在测试通过使用模板输出html来改善结构。这是模板...注意星号中的部分。这是动态内容,应根据传递给它的页面而改变。

<!DOCTYPE html>
<html lang="en">
<head>
<link href= "/project/includes/style.css" rel="stylesheet" type="text/css">
<meta charset="utf-8">
<title>Joke Database Project</title>
</head>
<body>
<div id="topheader">
<p>Joke Database Project</p>
</div>
<div id="navigation">
    <?php include $_SERVER['DOCUMENT_ROOT'] .'/project/includes/navbar.html.php'; ?>
</div>
<div id="container">

**<?php  include '/'.$content;?>**


</div>

</body>
</html>

我在php脚本中使用以下代码时工作正常:

$content="authors.html.php";
include $_SERVER['DOCUMENT_ROOT'] . '/project/includes/html_template.html.php';

但是我想让它变得不那么笨重所以我决定在我的helpers.inc.php文件中创建以下函数,该文件包含在主php脚本中:

function showpage($content)
{
    include $_SERVER['DOCUMENT_ROOT'] . '/project/includes/html_template.html.php';
}

所以我只想使用 showpage(&#34; author.html.php&#34;)来在模板中显示该内容。我遇到的问题是,当我使用此功能时,它不再识别主脚本中的变量。

我怎样才能以优雅的方式解决这个问题?

2 个答案:

答案 0 :(得分:0)

关于范围的问题:当你想要从函数中调用一个变量时你应该使用这个代码:

var $myvar ;

function myfunct () {
    $GLOBALS['myvar']
}

答案 1 :(得分:0)

您将模板包含在函数范围内,因此无法访问外部变量。您可以创建一个包含showpage()函数的类,并使用魔术方法__set__get为其分配变量:

class Controller {
  private $data = array();

  public function __set($name, $value)
  {
      $this->data[$name] = $value;
  }

  public function __get($name)
  {
      if (array_key_exists($name, $this->data)) 
      {
          return $this->data[$name];
      }

      //else handle errors
  }

  public function showpage($path)
  {
      include $_SERVER['DOCUMENT_ROOT'] . '/project/includes/' . $path;
  }

}

$ctrl = new Controller();
$ctrl->var1 = $var1;
$ctrl->var2 = $var2;
$ctrl->showpage("path/to/page");

然后您可以在模板中使用 $ this-&gt; varName

你应该在php中阅读MVC