模板文件如何生成
访问 http://127.0.0.1/forum.php?mod=xxx 根据mod xxx找到对应调用的php
以index为例
调用source/moduel/forum/forum_index.php
在这个php里面调用template方法
include template('diy:forum/discuz:'.$gid); 对应为 /template/模板名/forum/discuz.htm
template方法部分内容
$cachefile = './data/template/'.(defined('STYLEID') ? STYLEID.'_' : '_').$templateid.'_'.str_replace('/', '_', $file).'.tpl.php'; if($templateid != 1 && !file_exists(DISCUZ_ROOT.$tplfile) && !file_exists(substr(DISCUZ_ROOT.$tplfile, 0, -4).'.php') && !file_exists(DISCUZ_ROOT.($tplfile = $tpldir.$filebak.'.htm'))) { $tplfile = './template/default/'.$filebak.'.htm'; } if($gettplfile) { return $tplfile; } checktplrefresh($tplfile, $tplfile, @filemtime(DISCUZ_ROOT.$cachefile), $templateid, $cachefile, $tpldir, $file); return DISCUZ_ROOT.$cachefile;
$cachefile 内容为 ./data/template/6_diy_forum_discuz.tpl.php
checktplrefresh函数 为检查原来模板文件 /template/模板名/forum/discuz.htm 更新时间是否大于 6_diy_forum_discuz.tpl.php 重新生成tpl文件
这些tpl文件删除之后每次刷新页面都会重新生成
关于css问题
在源文件/template/模板名/forum/discuz.htm 里面
<!--{template common/header}-->
在common/header_common.htm里有这么一个东西
<!--{csstemplate}-->
它在模板解析的时候会被替换为
$template = preg_replace("/[\n\r\t]*\{csstemplate\}[\n\r\t]*/ies", "\$this->loadcsstemplate()", $template);
调用loadcsstemplate()
function loadcsstemplate() { global $_G; $scriptcss = '<link rel="stylesheet" type="text/css" href="data/cache/style_{STYLEID}_common.css?{VERHASH}" />'; $content = $this->csscurmodules = ''; $content = @implode('', file(DISCUZ_ROOT.'./data/cache/style_'.STYLEID.'_module.css')); $content = preg_replace("/\[(.+?)\](.*?)\[end\]/ies", "\$this->cssvtags('\\1','\\2')", $content); if($this->csscurmodules) { $this->csscurmodules = preg_replace(array('/\s*([,;:\{\}])\s*/', '/[\t\n\r]/', '/\/\*.+?\*\//'), array('\\1', '',''), $this->csscurmodules); if(@$fp = fopen(DISCUZ_ROOT.'./data/cache/style_'.STYLEID.'_'.$_G['basescript'].'_'.CURMODULE.'.css', 'w')) { fwrite($fp, $this->csscurmodules); fclose($fp); } else { exit('Can not write to cache files, please check directory ./data/ and ./data/cache/ .'); } $scriptcss .= '<link rel="stylesheet" type="text/css" href="data/cache/style_{STYLEID}_'.$_G['basescript'].'_'.CURMODULE.'.css?{VERHASH}" />'; } $scriptcss .= '{if $_G[uid] && isset($_G[cookie][extstyle]) && strpos($_G[cookie][extstyle], TPLDIR) !== false}<link rel="stylesheet" id="css_extstyle" type="text/css" href="$_G[cookie][extstyle]/style.css" />{elseif $_G[style][defaultextstyle]}<link rel="stylesheet" id="css_extstyle" type="text/css" href="$_G[style][defaultextstyle]/style.css" />{/if}'; return $scriptcss; }
这里生成了css文件
<link rel="stylesheet" type="text/css" href="data/cache/style_6_common.css?Wvn" /><link rel="stylesheet" type="text/css" href="data/cache/style_6_forum_index.css?Wvn" /><script type="text/javascript">
其中common.css是公用的 为forum_index.css生成是根据module.css根据规则生成的
我们看一下 部分原始的module.css
/** forum::index **/ #pt .y { width: 550px; height: 29px; overflow: hidden; } #chart { margin-bottom: 5px; } .chart { padding-left: 22px; background: url({IMGDIR}/chart.png) no-repeat 0 50%; color: {LIGHTTEXT}; } .chart em { color: {TABLETEXT}; } /* Name: mod_announcement Level: Function Explain: 公告。放置在不同位置时注意调整 #anc, #an li 的高度 Last Modify: Pony 1203191111 */ #an { margin-bottom: 5px; } #an dt { display: none; } #an li { float: right; clear: both; width: 526px; text-align: right; } #an li span { float: left; width: 450px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } #an li em { float: left; width: 75px; color: {LIGHTTEXT}; } #anc, #an li { height: 29px; overflow: hidden; } #anc i { font-style: italic; } /* 在线会员列表 */ .oll li { float: left; overflow: hidden; white-space: nowrap; width: 19.9%; height: 24px; line-height: 24px; } .oll img { vertical-align: middle; } /* 论坛首页热点 by Pony */ .heat { width: 370px; } .heatl { padding-left: 15px; margin-left: 385px; background: url({IMGDIR}/vline.png) repeat-y 0 0; } /* 论坛首页四格 by Alice */ #category_grid { padding: 0; border-top:1px solid {COMMONBORDER}; } #category_grid table { width:100%;table-layout: fixed; } #category_grid td { width: 25%; } .category_l1, .category_l2, .category_l3, .category_l4 { line-height: 25px; background: #fff; overflow: hidden; } .category_l1 { line-height: normal; } .category_l1, .category_l2, .category_l3 { background: url({IMGDIR}/category_lbg.png) no-repeat right center; } .ie6 .category_l4 { margin-right: -3px; } .slidebox_grid { position: relative; margin: 10px; border: 1px #ccc solid; } #category_grid h4 { width:100%; height: 30px; line-height: 30px; text-indent:10px; font-size: 12px; cursor: pointer; background: url({IMGDIR}/tb.png) repeat-x; position:relative; } .category_newlist { padding: 10px; } .category_newlist li { background:url({IMGDIR}/dot.gif) no-repeat left center; height: 21px; line-height:21px; overflow: hidden; padding-left:10px; } #category_grid h4 span { background:#CDCDCD; width:1px; height:30px; display:inline-block; position:absolute; left:0; top:0; } #category_grid h4 span.tit_newimg { background:#FFF; } #category_grid .newimgbox:hover h4 span, #category_grid .subjectbox:hover h4 span, #category_grid .replaybox:hover h4 span, #category_grid .hottiebox:hover h4 span, #category_grid .goodtiebox:hover h4 span { width:6px; background:url({IMGDIR}/grid.png) no-repeat 0 0;transition:width 0.2s ease 0s; overflow:hidden; } #category_grid .newimgbox:hover h4 span.tit_newimg { background-position:0 -30px; } #category_grid .subjectbox:hover h4 span.tit_subject { background-position:0 0; } #category_grid .repalybox:hover h4 span.tit_replay { background-position:0 -30px; } #category_grid .hottiebox:hover h4 span.tit_hottie { background-position:0 -60px; } #category_grid .goodtiebox:hover h4 span.tit_goodtie { background-position:0 -90px; } /** end **/
其中开头结尾 /** forum::index **/ /** end **/ 这一部分 会被追加到 forum_index.css里面