【问题标题】:Templating in php, without using a templating engine在php中模板,不使用模板引擎
【发布时间】:2011-08-24 23:29:15
【问题描述】:

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本质上是一个模板引擎'或任何类似的东西)。

【问题讨论】:

  • PHP 本质上是……啊,你打败了我!
  • 您当前的设置有什么问题?这正是我推荐的做法。
  • 它可能会让人感到困惑,当它们加载时,在用户登录时显示这个,当他们第一次登录时显示这个......等等
  • 这真的是 Smarty 的任务吗?我认为 Smarty 用于提供布局模板,而不是应用程序逻辑。
  • 在不使用模板引擎的情况下,是否有更简单的使用 PHP 模板的方法?答:没有。

标签: php smarty templating


【解决方案1】:

我建议对模板使用模板引擎(我推荐 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 系统的情况下创建可重用模板也更加困难 [需要引用]。您可以创建自己的适合自己的,但已经有一些很棒的。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      正如您所指出的,PHP 本身就是一个模板引擎,您想要做的事情可以通过一个简单的 if 语句来完成。

      或者,您可以创建一个实现该效果的函数,例如 WordPress 模板标签。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多