Question2Answer 以下简称 Q2A,国外一款开源免费的PHP问答系统。
公司服务器上挂着一个Q2A一直也没怎么用,想换个模板了才发现官方文档简直少的可怜,只能自己研究了。
Q2A制作模板主要有两种方式,一种是替换法,替换掉需要替换的部分,更改一下CSS什么的;还有一种是继承过来之后,完全重写模板类。
我觉得还是重写的比较好,第一种局限性太大,出了问题也不好找,所以下面就重写模板类做一个记录,非PHPer 就跳过吧。
模板制作注意的:
- qa-theme.php 和 qa-styles.css 两个文件必不可少
- qa-styles.css 该文件为默认样式文件,可以不写css内容,但是文件必须存在,还有一个功能就是提供了基础的模板、作者信息,详细参考默认模板。
Step1-继承系统模板类
其实这里最好是直接复制默认模板,然后清空该类内部所有方法属性就行了,免得手打出错。
class qa_html_theme extends qa_html_theme_base{
}
Step2-重写系统模板的方法
Q2A系统模板类主要用到以下几个关键方法,按照调用的先后顺序排列:
先调用的方法:html、head、body
然后被调用的:
head:head_title、head_metas、head_css、head_css、head_script……
body:body_script、body_header、body_content、body_footer……
body_content:$this->header()、$this->main()、$this->footer()
最后就是方法的实现了,这里我只列出来一部分常用的,还有太多没有列出来,其实有这些有够用,因为最先调用的html方法控制了整个页面的的代码输出,只要这个被重写了,下面的页面就随便了:
Public function html(){
$this->output(‘<html>’);
$this->head();
$this->body();
$this->output(‘</html>’);
}
Public function head(){ //头部代码 }
Public function body(){//body代码 }
依次类推,如果需要调用系统模板原方法,只需以静态调用方式调用即可(原方法并非静态方法)
qa_html_theme_base::head_css();
重写部分结束
Step3-成员变量内容简析
系统模板中主要有7个成员变量:
$indent、$lines、$conteext、$rooturl、$template、$content、$request
其中最常用的是后面4个,$rooturl、$template、$content、$request
$rooturl:获取当前url的相对路径
$template:当前模块名
$content:页面信息,包含了页面上所需的大部分信息,以数组形式返回
$request:当前请求的页面,到目前为止,我了解到的这个成员变量,99%的时候都是与$template的值一样。
目前只了解到这里了,未完待续。
以上信息,仅供参考,如有错误,欢迎指出:)