uchome 模板

discuz

2009-12-05 16:14

模板的位置

模板解析函数是调用/source目录下的function_template.php文件中的parse_template函数来实现的。

解析过程并不复杂,主要是读取模板文件(.htm),用正则表达式替换标记为对应的PHP代码,最终生成一个标准的PHP文件,保存到模板缓存目录/data/tpl_cache/供后续使用。

uchome 模板在 template/default 目录里 ,修改模板后不会马上生效,需要去后台清空缓存文件或者手动去FTP删除data\tpl_cache 删除相关文件。

缓存文件在 data\tpl_cache 文件名是:template_模板目录名_模板文件名.php


后台的模板在admin/admin/tpl     解析后的文件同样在data\tpl_cache目录

template_tpl名_模板文件名.php

这里提供一种方法,可以使修改模板文件后,不用手动删除缓存的模板文件就能直接看到修改结果。方法为修改/source/function_common.php中的代码

if(!file_exists($objfile)) {

改为

if(!file_exists($objfile)||filemtime($objfile)<filemtime(S_ROOT.'./'.$tpl.'.htm')) {

即可。

因为此方法增加了一次对文件系统的访问,一定程度上会影响性能,所以此处的修改只建议运用在调试服务器上。


模板的语法


1、调用其他模板

<!--{template footer}-->

说明:将以模板header.htm来替换此处的代码

2、调用头像

<!--{avatar($value[uid],small)}-->

<?php echo avatar($value[uid],small); ?>

3、调用广告

<!--{ad/header}-->

解析后的代码:

<?php adshow('header'); ?>

4、调用时间

模板代码

<!--{date('Y-m-d H:i', $value[dateline], 1)}-->

解析后的代码:

<?php echo sgmdate('Y-m-d H:i', $value[dateline], 1); ?>

5、输出PHP代码

模板代码:

<!--{eval echo formhash();}--> eval 就是执行php代码

解析后的代码:

<?php echo formhash(); ?>

说明:<!–{eval和}–>之间的是需要执行的PHP代码,要求语句完整。

6、调用变量

模板代码:

<a href="space.php?uid=$value[uid]">{$_SN[$value[uid]]}</a>

解析后的代码:

<a href="space.php?uid=<?=$value['uid']?>"><?=$_SN[$value['uid']]?></a>

说明:{和}之间的是需要输出的变量。

7、选择输出逻辑

模板代码:

<!--{if empty($mtag['ismember']) &amp;&amp; $mtag['joinperm'] < 2}-->
<li><a href="cp.php?ac=mtag&amp;op=join&amp;tagid=$mtag[tagid]" id="a_mtag_join_$mtag[tagid]" onclick="ajaxmenu(event, this.id, 99999)">加入群组</a></li>
<!--{elseif $mtag['allowpost']}-->
<li><a href="cp.php?ac=thread&amp;tagid=$mtag[tagid]">发起话题</a></li>
<!--{/if}-->

解析后的代码:
<?php if(empty($mtag['ismember']) &amp;&amp; $mtag['joinperm'] < 2) { ?>
<li><a href="cp.php?ac=mtag&amp;op=join&amp;tagid=<?=$mtag['tagid']?>" id="a_mtag_join_<?=$mtag['tagid']?>" onclick="ajaxmenu(event, this.id, 99999)">加入群组</a></li>
<?php } elseif($mtag['allowpost']) { ?>
<li><a href="cp.php?ac=thread&amp;tagid=<?=$mtag['tagid']?>">发起话题</a></li>
<?php } ?>

说明:当然这里可以没有elseif,其语法有点类似VB,需要有结尾符。

8、循环输出逻辑

模板代码 :
<!--{loop $list $key $value}-->
<tr <!--{if $key%2==1}--><!--{/if}-->>
<td>
<!--{if $value[displayorder]}--> [顶] <!--{/if}-->
<!--{if $value[digest]}--> [精] <!--{/if}-->
<a href="space.php?uid=$value[uid]&amp;do=thread&amp;id=$value[tid]">$value[subject]</a></td> <td><a href="space.php?uid=$value[uid]">{$_SN[$value[uid]]}</a><br>$value[replynum]/$value[viewnum]</td> <td><a href="space.php?uid=$value[lastauthorid]" title="{$_SN[$value[lastauthorid]]}">{$_SN[$value[lastauthorid]]}</a><br><!--{date('m-d H:i',$value[lastpost],1)}--></td>
</tr>
<!--{/loop}-->

解析后的代码:

<?php if(is_array($list)) { foreach($list as $key => $value) { ?>
<tr <?php if($key%2==1) { ?><?php } ?>>
<td>
<?php if($value['displayorder']) { ?> [顶] <?php } ?>
<?php if($value['digest']) { ?> [精] <?php } ?>
<a href="space.php?uid=<?=$value['uid']?>&amp;do=thread&amp;id=<?=$value['tid']?>"><?=$value['subject']?></a></td>
<td><a href="space.php?uid=<?=$value['uid']?>"><?=$_SN[$value['uid']]?></a><br><?=$value['replynum']?>/<?=$value['viewnum']?></td>
<td><a href="space.php?uid=<?=$value['lastauthorid']?>" title="<?=$_SN[$value['lastauthorid']]?>"><?=$_SN[$value['lastauthorid']]?></a><br><?php echo sgmdate('m-d H:i',$value[lastpost],1); ?></td>
</tr>
<?php } } ?>

说明:loop后跟三个参数时,第一个参数是用于循环的数组,第二个和第三个参数分别是对数组中每一项循环时项的键名和值。

说明:loop后跟两个参数时,第一个参数是用于循环的数组,第二个参数是对数组中每一项循环时项的值。

枫芸志原创文章,本文链接:http://witmax.cn/uchome-template-syntax.html