discuz用多了,觉得它的模板确实好用,便将它的数据库操作、模板提取出来,小组了一下,用于单独的开发用。
经过一个商城网站的开发,应用已经非常顺手了。商城主站完成后,进行代理网站的开发,其实主要就是应用新的模板,却发现模板部分一开始就没有考虑周全,因为我把后台的模板也写在了模板文件夹里,这就倒至每换一个模板都要将后台的模板跟着复制一遍,非常郁闷。就想把后台的模板和前面分开,看了看discuz模板的几个函数,发现它是有考虑这个目录问题的。
这是调用模板的函数,可以从参数里看出,它是可以定义目录的,那不就方便了,只要把后台的模板单独放在一个文件夹里,在调用的时候加上后台的目录不就行了?理论上是这样的,但测试后,调用是没问题,但模板里调用子模板的时候出现了调用失败,很显示是找错了模板目录。
接着看下面的函数:
这个函数是用来判断缓存模板文件是不是存在的,如果不存在或超时了,就调用parse_template($maintpl, $templateid, $tpldir,$timecompare);这个,在template.func.php文件里找到它,可以看出它是传了模板文件夹进来的,但为什么子调用不能成功呢,找到对了调用的正则:
发现stripvtemplate函数,再在下面找到stripvtemplate:
很明显,这个函数没有调用传过来的$tpldir,而是自己把它置为了空,那到最后就成了调用默认设置的模板文件目录了,问题找到了就很好办了,先改正则:
多加一个参数,将模板目录传过来。再改stripvtemplate函数:
加上第三个参数,并将$tpldir=''去掉,这样就好啦。
注:代码里有些地方注释掉的,是discuz原有的,我不用,就注释了。