X2 在每个页面都做了标记,很好的解决了这个问题。
随便打开一个文件,就能看到类似
- define('CURSCRIPT', 'forum');
或者
- define('CURSCRIPT', 'admin');
这样的语句,这就是入口文件标记。
通过判断入口文件标记,能实现判断现在在论坛还是家园,门户,群组,后台管理,杂项等。
下面是入口文件标记列表:
列表整理中....
通过判断入口文件标记,已经能知道当前是在哪个大类下操作了。还可以通过判断当前模块,来实现更详细的判断,比如详细到看帖,还是在列表页。
下面是模块标记列表:
列表整理中...
知道了怎么判断当前页面动作后,可以灵活的通过这个小技巧来自定义一些功能。下面是一个例子:
X2 有读写分离功能,但是只要设置了读写分离,所有的读取操作都到从库去了。希望能灵活控制查询从库的动作。
在 source/class/class_mysql_slave.php 文件下 有个 function query 函数,可以在里面添加各种判断进行控制。
例如
- if($this->slaveid
&& !$this->slaveexcept && strtoupper(substr($sql, 0 ,
6)) == 'SELECT' && in_array(CURSCRIPT,
array('search','misc','admin'))) {
那么就是只有 「搜索」「统计和排行榜」「管理后台」 才会进行读取从库,其他操作还是在主库上进行。
再例如
- if($this->slaveid
&& !$this->slaveexcept && strtoupper(substr($sql, 0 ,
6)) == 'SELECT' && in_array(CURSCRIPT, array('forum'))
&& in_array(CURMODULE, array('forumdisplay', 'viewthread'))) {
那么就是只有论坛的 「列表页」「看帖页」 才会读取从库,其他的操作全部还是读取主库的。
这只是其中一个灵活运用的例子,更多的还要根据自己的需要来进行修改,有了这些详细的标记,那么判断起来就随心应手了。