开发者新闻:XOOPS.org 使用 Smarty 模板引擎
发布者: onokazu于 2002/8/23 0:04:25 14071 次阅读我们刚刚将我们的网站升级到最新开发版本(CVS + Smarty)。我们现在使用 Smarty 模板引擎作为新的主题系统。那么什么是 Smarty,它对我们用户和开发者有什么好处?
引用
摘自 http://smarty.php.net/
Smarty 是一个 PHP 模板引擎。更具体地说,它提供了一种管理方式,将应用程序逻辑和内容与其表示分离。这最好在一个应用程序程序员和模板设计师饰演不同角色的情况下,或者在大多数情况下不是同一个人时进行描述。
简而言之,使用 Smarty,设计师只需修改模板文件就能完全控制应用程序的表示,而模块开发者只需关注应用程序逻辑并将变量传递给这些模板文件。
例如,我们旧的 'phpkaox' 主题文件看起来是这样的
function themeheader($show_rblock) {
global $xoopsConfig;
echo '';
OpenWaitBox();
echo 'bgcolor="#666666">
.XOOPS_URL.'">
.XOOPS_URL.'/themes/phpkaox/images/logo.gif">
';
if ( $xoopsConfig['banners'] == 1 ) {
showbanner();
}
echo '
cellspacing="0" cellpadding="0" height="100%">
valign="top" align="center">'
;
make_sidebar("left");
echo '
' ;
}
function themefooter($show_rblock, $footer) {
echo "";
if ( $show_rblock ) {
echo '' ;
make_sidebar("right");
}
echo '
' ;
echo $footer;
echo '
';
CloseWaitBox();
}
function themesidebox($title, $content) {
echo '
'
.$title.'
' .$content.'
';
}
而当我们使用 Smarty 时,定义整个网站外观的 layout.tpl 文件将变为
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset={$xoops_charset}' />
<meta name='keywords' content='' />
<meta name='description' content='' />
<meta name='generator' content='{$xoops_version}' />
<title>{$xoops_pagetitle}title>
<link rel='stylesheet' type='text/css' media='all' href='{$xoops_url}/xoops.css' />
{if $xoops_themecss != ""}
<style type='text/css' media='all'>style>
{/if}
<link href='{$xoops_url}/favicon.ico' rel='SHORTCUT ICON' />
<script src='{$xoops_url}/include/xoopsjs.php'>script>
head>
<body>
<table width="100%" border="0" cellspacing="1" cellpadding="0" bgcolor="#666666">
<tr>
<td valign="top" bgcolor="#DDE1DE">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="285" valign="middle" align="center">
<a href="{$xoops_url}/">
<img src="{$xoops_url}/themes/phpkaox/images/logo.gif">
a>
td>
<td>
{if $xoops_banner != ""}
{$xoops_banner}
{else}
{/if}
td>
tr>
table>
td>
tr>
<tr>
<td valign="top" bgcolor="#FFFFFF">
<table width="100%" border="0" cellspacing="0" cellpadding="0" height="100%">
<tr>
<td width="20%" bgcolor="#EFEFEF" valign="top">
{foreach item=block from=$xoops_lblocks}
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr>
<td bgcolor="#E2DBD3">
<b><font color="#666600">{$block.title}font>b>
td>
tr>
<tr>
<td valign="top">{$block.content}td>
tr>
table>
<br>
{/foreach}
td>
<td valign="top">
{if $xoops_contents_tpl == ""}
{$xoops_contents}
{else}
{include file="$xoops_contents_tpldir/$xoops_contents_tpl"}
{/if}
td>
{if $xoops_showrblock == 1}
<td width="20%" bgcolor="#efefef" valign="top">";
{foreach item=block from=$xoops_rblocks}
100%" border="0" cellspacing="0" cellpadding="2">
#E2DBD3">
<b><font color="#666600">{$block.title}font>b>
td>
tr>
<tr>
<td valign="top">{$block.content}td>
tr>
table>
<br>
{/foreach}
td>
{/if}
tr>
table>
td>
tr>
<tr>
<td height="30" valign="middle" bgcolor="#DDE1DE" align="center">
{$xoops_footer}
td>
tr>
table>
body>
html>
现在,如您所注意到的,Smarty 并不试图在逻辑和模板之间完全分离。模板文件中确实存在一些 Smarty 的专用逻辑函数和参数。然而,与我们在旧主题文件中的 PHP 代码相比,这几乎可以忽略不计,而且已经有一份详细的说明手册,说明如何使用它们,您可以在 http://smarty.php.net/ 上查看。
不仅主题文件,每个模块也可以有自己的模板文件。我们已经将在此站上运行的论坛模块转换为 Smarty。虽然不是强制性的,但我们强烈建议所有模块都使用模板,我们将发布一份详细文档,说明如何为模块创建模板文件。
坏消息是,使用模板文件的模块将无法在旧主题下运行……这也意味着所有主题都应该转换为使用 Smarty 模板文件。
以上就是目前的更新,请像往常一样报告错误,这样我们就可以尽快发布下一个版本。