日志 · 2014年7月22日

Question2Answer 主题/皮肤 制作/学习/qa-theme-base.php 摘要

Question2Answer 以下简称 Q2A,国外一款开源免费的PHP问答系统。

 

公司服务器上挂着一个Q2A一直也没怎么用,想换个模板了才发现官方文档简直少的可怜,只能自己研究了。

 

Q2A制作模板主要有两种方式,一种是替换法,替换掉需要替换的部分,更改一下CSS什么的;还有一种是继承过来之后,完全重写模板类。

 

我觉得还是重写的比较好,第一种局限性太大,出了问题也不好找,所以下面就重写模板类做一个记录,非PHPer 就跳过吧。

 

模板制作注意的:

  1. qa-theme.php 和 qa-styles.css 两个文件必不可少
  2. 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的值一样。

 

目前只了解到这里了,未完待续。

 

 

 

以上信息,仅供参考,如有错误,欢迎指出:)