什么是使用PHP创建模板的最佳方法?

时间:2009-08-20 17:26:03

标签: php html templates

我有一个类,它可以在连接所有模板后收集模板并显示最终输出。

class Template{

$private $output = '';

public function Load_Template($template, $data = null){
    ob_start();
    include($template);
    $this->output .= ob_get_clean();
}

public function Display($add_footer = true){
    echo $this->output;
}

}

现在,目前我的模板看起来像这样。

<h1><?php echo $data['name']; ?></h1>

或涉及循环的更复杂的看起来更像

<ul>
  <li>
  <?php foreach($data as $user){ ?>
   <h1><?php echo $user['name']; ?></h1>
  <?php } ?>
  </li>
</ul>

实际上数据的数据多于其中的数据,但我相信你们明白这一点。 现在,我听到人们说最好有这样的模板

<h1>{name}</h1>

<ul>
  <li>
   <h1>{name}</h1>
  </li>
</ul>

然后使用str_replace函数......现在,如果我使用foreach循环,我将如何完成这样的事情...我应该改变我的课程,如果是这样,我可以得到一些关于如何...你们建议使用模板吗?

4 个答案:

答案 0 :(得分:1)

对于这些“{tag}”类型模板,您有一个非常受欢迎的引擎:Smarty

答案 1 :(得分:1)

Smarty太多余了!你的班级具有剪切页面的功能就足够了。

答案 2 :(得分:0)

每种模板语言都有自己的方法来解决问题。你可以,而不是从头开始编写自己的模板语言,使用像Smarty那样的标准语言之一。

如果你自己编写,你至少需要一个能让你表达循环和条件的结构。我之前看过的一个简单方法就是:

<!-- BEGIN conditional_or_looped_block_named_foo -->
Stuff that may appear zero or more times
<!-- END conditional_or_looped_block_named_foo -->

当然,语法差别很大,从一种语言到另一种语言,但基本方法是相同的:有一些标记围绕你想要隔离和重复(或省略)的代码部分。

答案 3 :(得分:0)

这应该会给你一个想法: http://www.handyphp.com/index.php/PHP-Resources/Handy-PHP-Tutorials/Creating-Your-First-Template-Driven-PHP-Website-Part-2.html

我通过快速搜索找到它,它有代码来执行您所要求的操作,它只使用您创建的变量进行搜索和替换。

所以你的foreach()调用不会回显但存储在变量中,然后用模板中的{users}替换该变量。