在不使用模板引擎的情况下在PHP中进行模板化

时间:2011-05-13 13:56:25

标签: php smarty templating

PHP中的东西,如果存在某个变量,我想显示内容。

例如,对于当前评论,我想检查作者是否已经对此回复进行了投票,因此代码将如下所示:

<?php if (isset($replies)): ?>
    <?php foreach ($replies as $reply): ?>

        <?php if (isset($already_voted)): ?>
            <?php foreach ($already_voted as $vote): ?>

            // if vote['id'] == $reply['id'], echo what they have already voted

            <?php endforeach; ?>
        <?php endif; ?>

    <?php endforeach; ?>
<?php endif; ?>

如果不使用像smarty那样臃肿的模板引擎,这样做会更简单吗?

(请不要评论......是'PHP'本质上是一个模板引擎'或者其他任何内容)。

3 个答案:

答案 0 :(得分:2)

我建议为模板使用模板引擎(我推荐PHPTAL),但是你已经非常具体地询问了不使用引擎的方法。你可以简单地简化一下你所拥有的PHP代码,而不是那么多:

<?php
if (isset($replies)) {
   foreach ($replies as $reply) {

      if (isset($already_voted)) {
         foreach ($already_voted as $vote) {

    // if vote['id'] == $reply['id'], echo what they have already voted

         }
      }

   }
}

当然,这与你拥有的几乎完全相同,它只使用更少的字符。通过缩进跟踪打开的代码块。

请注意,至少根据我的理解,模板的重点是重用。您希望能够在尽可能多的页面上使用相同的模板,或至少部分模板(例如宏)。对于某些静态内容,这可能并不总是可能,但这就是关键词尽可能的原因。正如你应该对任何代码所做的那样,重用你所能做的。

使用模板系统可以更轻松地将视图与逻辑分开。你可以创建php模板(正如你所做的那样),但我认为它缺乏清晰度,而且在模板中进行处理要比以前更容易。在PHP中没有任何类型的系统创建可重用模板也更加困难[需要引证]。你可以创建自己的,但是已经有一些很棒的了。

答案 1 :(得分:1)

PHPLib(AFAIK GNU许可证开源)有一个模板类,它是一个包含文件,非常轻巧,易于使用:

http://www.sanisoft.com/phplib/manual/TemplateExamples.php

答案 2 :(得分:0)

正如您所指出的,PHP本身就是一个模板引擎,您可以使用简单的if语句来完成。

或者,你可以创建一个这样的功能,就像对WordPress模板标签一样。