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'))) {
那麼就是隻有論壇的 「列表頁」「看帖頁」 才會讀取從庫,其他的操作全部還是讀取主庫的。
這只是其中一個靈活運用的例子,更多的還要根據自己的需要來進行修改,有了這些詳細的標記,那麼判斷起來就隨心應手了。