我投票给 PHP。 (PHPis模板引擎。)
function template($file, $vars) {
ob_start();
if(count($vars) > 0) { extract($vars); }
include 'views/'.strtolower($file).'.php';
return ob_get_clean();
}
顺便说一句,它可以让您执行以下操作。
echo template('layout', array( 'content' => template('page', $myData) ));
当 PHP 本身只需 6 行就足够了时,您是否应该费心使用另一个模板/布局引擎?
Edit:
也许我不清楚这是如何工作的。
template()
使用模板名称(也用于组织工作的子目录)调用,并使用数组对象作为第二个参数。如果给定的变量不为空,例如template('index',null)
是,则该数组被视为关联数组:并且每个键都成为包含该值的变量。
所以逻辑就变成了:
template('my_template', array(
'oranges' => 'apples'
));
而“views/my_template.php”是:
<html>
<head>
<title>Are apples == <?= $oranges ?>?</title>
</head>
<body>
<p style="color: <?= $oranges == 'oranges' ? 'orange" : 'darkgreen' ?>">
Are apples == oranges?
</p>
</body>
</head>
所以,每次变量$oranges
用于PHP获取从数组导出的数据,$vars['oranges']
.
所以所有的输出都由ob_get_clean()
并以字符串形式返回。输出这个字符串echo
or print
,或将其分配给一个数组以作为内容传递到布局。如果您理解这一点,那么就可以很容易地采用我所编写的内容并对其进行布局,或者甚至具有输出 JSON 的逻辑的页面。
我建议您在放弃这个答案之前先尝试一下。它有一种在你身上成长的趋势。
Edit 2:
根据要求,我将显示我的项目将使用的目录布局。请注意,其他 MVC 框架使用不同的结构。但是,我喜欢我的简单。
index.php
application/
framework.php
controllers/
welcome.php
views/
template.php
index.php
为了安全起见,我有一个.htaccess
路由每个请求的文件,除了那些js/
or css/
,到index.php
脚本,有效地隐藏我的目录。如果您愿意,您甚至可以通过模板制作 CSS,以使用变量等,我已经这样做了。
因此,任何拨打template('template', array())
将加载文件./views/template.php
自动地。如果我在名称中包含斜杠,它就会成为路径的一部分,如下所示:./views/posts/view.php
.
Edit 3:
感谢您的更新。因此,您的 index.php 文件中必须有一些代码将请求的 url 路由到适当的控制器,对吗?你能展示一些吗?另外,您的视图看起来并不反映您的控制器目录。您能多解释一下 url 如何映射到控制器和/或视图吗? Framework.php 中有什么?它有什么作用?谢谢!
我展示的代码是我的 Web 开发私有框架的一小部分摘录。我已经讨论过可能会发布它 https://stackoverflow.com/questions/990816/how-do-i-release-sell-promote-a-semi-commercial-open-source-project具有双重许可证,或作为商业用途的捐赠软件,但没有什么是其他人不能在短时间内(15-21 天)编写的。如果你愿意你可以在 GitHub 上阅读我的源代码 http://github.com/rk/uFramework/tree/master...但请记住它仍然是 alpha 材料。
许可证是知识共享SA http://creativecommons.org/licenses/by-sa/3.0/us/.