【发布时间】:2011-05-15 04:32:06
【问题描述】:
您知道任何可以帮助我开始使用 PHP 制作模板驱动网站的网站吗?
【问题讨论】:
-
如果您真的必须使用单独的模板引擎,请访问该引擎的相应网站并阅读他们的文档。如果他们没有文档,请不要使用该模板引擎。
您知道任何可以帮助我开始使用 PHP 制作模板驱动网站的网站吗?
【问题讨论】:
首先,我会先从 Smarty 开始,因为我已经用过很多次了。由于这是一个社区 wiki,如果您选择,请随意插入您自己的模板引擎示例。
模板提供了一种很好的方式来构建 HTML 并将 HTML 内容从逻辑代码中分离出来。它还提供了一种组织 HTML 页面各个组件的方法,因此更易于管理,并且更易于重复使用。
首先,我们将使用 Smarty 显示一个简单的页面。首先,您需要真正获得 Smarty。所以我们将前往Smarty download page。在撰写本文时,最新的稳定版本是 Smarty 3.0.7,因此我们将继续下载它。下载.tar.gz 文件或.zip 文件取决于您拥有的系统。对于 Windows 和 Mac 用户(很可能使用 MAMP 或 XAMPP),.zip 可能是一个不错的选择,尽管您总是可以使用程序来处理 .tar.gz 文件。使用 Linux 或 *BSD 类型系统的用户可以获取.tar.gz 版本。
现在,我们提取文件并获得以下目录布局:
COPYING.lib
demo/
libs/
|__ Smarty.class.php
|__ ... some other files and folders ...
README
SMARTY2_BC_NOTES
现在,Smarty.class.php 是我们要包含以使用 Smarty 的主文件。它位于 libs 目录中。由于“libs”是一个非常通用的名称,我们将把它复制到我们的文档根文件夹,并将其重命名为Smarty。现在我们的理论文档根文件夹目前是空的,所以它最终会是这样的:
Smarty/
|__ Smarty.class.php
|__ ... some other files and folders ...
现在 Smarty 已安装,我们将创建一个非常基本的模板和 php 脚本来展示它是如何工作的。首先,为了让事情井井有条,我们将创建一个 templates 文件夹来保存我们的模板。然后我们将在 templates 文件夹中创建一个 mypage.php 文件和一个 mypage.tpl 文件:
mypage.php
templates/
|__ mypage.tpl
Smarty/
|__ Smarty.class.php
|__ ... some other files and folders ...
mypage.php
<?php
require_once('Smarty/Smarty.class.php');
$smarty = new Smarty();
$smarty->assign("MYVAR", "Hello World");
$smarty->display("templates/mypage.tpl");
?>
templates/mypage.tpl
<html>
<head>
<title>My Sample Page</title>
</head>
<body>
<h1>{$MYVAR}</h1>
</body>
</html>
现在如果我们导航到mypage.php,例如http://localhost:8000/mypage.php,“Hello World”将以粗体字显示。那么发生了什么?让我们单步执行代码:
require_once('Smarty/Smarty.class.php');
这里我们包括主要的 Smarty 类。我们需要它来实现所有 Smarty 功能。
$smarty->assign("MYVAR", "Hello World");
你会经常使用它。在本例中,assign 命令采用一个值“Hello World”,并将其分配给名称“MYVAR”。如果你看模板:
<h1>{$MYVAR}</h1>
您会注意到{$MYVAR}。 {} 向 Smarty 表明它需要计算内部的表达式。这可能是一个命令或只是一个变量。它可以产生输出或简单地设置一个变量值。在这种情况下,它只是输出我们分配的$MYVAR 的值。
$smarty->display("templates/mypage.tpl");
最后,我们告诉 Smarty 解析模板,然后像在 PHP 页面中简单地 echo'ed out HTML 一样显示它。看中吧?现在,很多人会想要遍历数组(即一组 db 结果),所以让我们看一个如何实现的示例。
首先,我们将对代码进行调整。新的列表如下:
mypage.php
<?php
require_once('Smarty/Smarty.class.php');
$myarray = array(
"John",
"Jane",
"Henry",
"Nancy",
"Gorilla"
);
$smarty = new Smarty();
$smarty->assign("MYARRAY", $myarray);
$smarty->display("templates/mypage.tpl");
?>
templates/mypage.tpl
<html>
<head>
<title>My Sample Page</title>
</head>
<body>
<h1>Results</h1>
<ul>
{foreach $MYARRAY as $myvalue}
<li>{$myvalue}</li>
{/foreach}
</ul>
</body>
</html>
如果你重新加载页面,你会得到这样的结果:
现在,只需要注意一些变化:
$smarty->assign("MYARRAY", $myarray);
我们分配了一个包含数组的变量,而不是字符串值。这被传递给 Smarty,它使用 {foreach} 循环中的数据:
<ul>
{foreach $MYARRAY as $myvalue}
<li>{$myvalue}</li>
{/foreach}
</ul>
Smarty 中的 foreach 很像 PHP 的 foreach。在这种情况下,Smarty 获取分配给$MYVALUE 的数组并循环遍历它,将$myvalue 设置为当前循环值的结果。从那里我们可以使用{$myvalue} 来引用每个单独的项目。现在,假设我们想让这个无序列表成为一个小部件,以便在其他地方重用。我们可以通过使用模板本身作为变量来做到这一点。
HTML 会很快变得很长。 Smarty 通过让您将页面的各个部分分解为单独的组件来帮助管理这一点。所以我们要做的就是把我们的无序列表放到一个单独的页面中。我们的新代码将如下所示:
mypage.php
<?php
require_once('Smarty/Smarty.class.php');
$myarray = array(
"John",
"Jane",
"Henry",
"Nancy",
"Gorilla"
);
$smarty = new Smarty();
$smarty->assign("MYARRAY", $myarray);
$content = $smarty->fetch("templates/mycontent.tpl");
$smarty->assign("MYCONTENT", $content);
$smarty->display("templates/mypage.tpl");
?>
templates/mypage.tpl
<html>
<head>
<title>My Sample Page</title>
</head>
<body>
<h1>Results</h1>
{$MYCONTENT}
</body>
</html>
mycontent.tpl
<ul>
{foreach $MYARRAY as $myvalue}
<li>{$myvalue}</li>
{/foreach}
</ul>
我们得到的结果是一样的,但是后端现在更有条理。如果需要,我们现在可以在其他页面中重用这个mycontent.tpl 文件。该组织的常见用途是制作页眉、页脚和页面的其他部分单独的模板。这可以让您缩小范围到相关部分。
那么后端发生了什么?这里需要注意的重要命令是:
$content = $smarty->fetch("templates/mycontent.tpl");
fetch() 的工作方式与显示类似,不同之处在于它不是立即输出,而是将结果作为呈现的 HTML 字符串返回。请注意,因为$MYARRAY 在mycontent.tpl 中使用,我们必须在它之前分配数组,而不是在最后的display() 调用之前。这个顺序很重要!
Smarty 的基本介绍到此结束,并使用模板引擎来管理您的内容。 Smarty Documentation 提供了一个很好的资源来查看 smarty 的所有功能。请务必查看所有可用的命令,以确保您有效地使用它!
【讨论】:
Smarty for PHP 是一个合适的模板系统。您可以尝试使用它以及他们的文档来帮助开发模板驱动的网站。
【讨论】:
根据您的需要,您可以使用几个包含的文件创建自己的模板系统。
【讨论】: