多年来我一直在使用我自己的PHP模板引擎,这不是我自己的“我自己的”,就像我多年前在教程中看到的那样。但是,我重构了大部分代码,使其更简单,更易于使用。没有它,我很少创建一个PHP项目。
这是非常基本的,类只有3个方法,加载,赋值和渲染。 load
加载模板文件(通常是HTML)并将其保存为字符串变量。 assign
允许以{reference}
的形式将HTML中的引用分配给变量。渲染器解析模板文件并用变量替换引用。基本上就是这样。非常基本,非常简单,节省时间。
我喜欢这个模板引擎,因为我讨厌将PHP与HTML混合在一起。因此我不太喜欢PHP本身作为模板引擎(如WordPress模板),虽然对于这样的事情非常强大。我不喜欢将我的文件保存为.php文件然后用一堆混合的PHP代码包含/要求它们的想法,我喜欢保持简单。
然而,由于这个模板引擎很简单,它不允许条件和循环,有时需要两个非常重要的事情。到目前为止,我一直在通过分离模板文件来解决该问题,然后在控制器中执行所有条件/循环。例如,我有一个主模板文件,其中有<ul>
列表,其中的项目来自数据库,我只有一个单独的模板文件,其中包含<li>
项的一行代码。在控制器中执行循环并根据需要渲染<li>'s
。
这是一个介绍,所以你了解我的来源。现在回到真正的问题......
我一直在思考试验这种方法的替代方案,并开始在HTML模板文件中使用PHP,尽可能少的代码。例如,像这样:
<ul>
<?php foreach($array as $val): ?>
<li><?php echo $val; ?></li>
<?php endforeach; ?>
</ul>
在控制器中是这样的:
// assuming the data comes from a
$array = array('Item 1', 'Item 2', 'Item 3'); database...
ob_start();
eval(' ?>'.$TPL->render('main').'<php ');
echo ob_get_clean();
echo $val
我应该有一个被替换的参考。但是当我在那里等待使用$val
变量时,在模板渲染中替换引用是不是完全愚蠢?但我也不喜欢在我的模板文件中使用大量PHP代码的想法,我宁愿尽可能地避免在不妥协整个事情的情况下尽可能多。但是,我不知道如何在echo
的位置添加引用,并为每个循环将其替换为$val
。你对此有何看法?也许我在考虑这个问题,也许我应该忘记整件事情并继续这样做,就像我过去几年一直在做的那样。它对我来说非常好,简化了我的所有项目。 最后,我基本上在寻找一种方法来简化模板文件中的条件和循环,而不需要额外的模板文件,有些只有几行简单的代码。
答案 0 :(得分:1)
我相信其他语言解决这个问题的方法是提供服务器端标记,例如asp repeater control,我也发现this question,这表明你坚持使用你的解决方案并给出一个-1建议滚动他们自己的自定义模板标签来实现同样的事情...也许它只是没有变得更简单,建立它是过度设计。