开发者新闻: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'] == ) {
    
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 模板文件。

以上就是目前的更新,请像往常一样报告错误,这样我们就可以尽快发布下一个版本。