久久久久av_欧美日韩一区二区在线_国产精品三区四区_日韩中字在线

返回列表 發(fā)帖
查看: 2920|回復: 0

discuz X2如何判斷當前頁面的動作

83

主題

-6

回帖

329

積分

爐火純青

貢獻
2 點
金幣
241 個
樓主
發(fā)表于 2019-6-1 16:44:13 | 只看樓主 |倒序瀏覽 |閱讀模式
*************************************************
** 本教程基于版本:Discuz! X 2.0                                         **
*************************************************



在制作插件,或者想自己修改一些功能的時候,經常會遇到一個情況,就是需要獲取到當前頁面在進行一個什么動作,比如是在看帖,還是在看主題列表,或者是在搜索,還是在后臺操作。然后根據相關動作進行判斷執(zhí)行什么代碼,比如在后臺操作,就自動記錄一些相關LOG,或者搜索的時候,把數據庫切換到從庫去。


X2在每個頁面都做了標記,很好的解決了這個問題。

隨便打開一個文件,就能看到類似
  1. define('CURSCRIPT', 'forum');
復制代碼

或者

  1. define('CURSCRIPT', 'admin');
復制代碼

這樣的語句,這就是入口文件標記。

通過判斷入口文件標記,能實現判斷現在在論壇還是家園,門戶,群組,后臺管理,雜項等。

下面是入口文件標記列表:

列表整理中....

通過判斷入口文件標記,已經能知道當前是在哪個大類下操作了。還可以通過判斷當前模塊,來實現更詳細的判斷,比如詳細到看帖,還是在列表頁。

下面是模塊標記列表:

列表整理中...

知道了怎么判斷當前頁面動作后,可以靈活的通過這個小技巧來自定義一些功能。下面是一個例子:

X2有讀寫分離功能,但是只要設置了讀寫分離,所有的讀取操作都到從庫去了。希望能靈活控制查詢從庫的動作。

在source/class/class_mysql_slave.php 文件下  有個 function query函數,可以在里面添加各種判斷進行控制。

例如
  1. if($this->slaveid && !$this->slaveexcept && strtoupper(substr($sql, 0 , 6)) == 'SELECT' && in_array(CURSCRIPT, array('search','misc','admin'))) {
復制代碼



那么就是只有“搜索”“統(tǒng)計和排行榜”“管理后臺”  才會進行讀取從庫,其他操作還是在主庫上進行。

再例如
  1. if($this->slaveid && !$this->slaveexcept && strtoupper(substr($sql, 0 , 6)) == 'SELECT' && in_array(CURSCRIPT, array('forum')) && in_array(CURMODULE, array('forumdisplay', 'viewthread'))) {
復制代碼


那么就是只有論壇的“列表頁”“看帖頁”才會讀取從庫,其他的操作全部還是讀取主庫的。

這只是其中一個靈活運用的例子,更多的還要根據自己的需要來進行修改,有了這些詳細的標記,那么判斷起來就隨心應手了。


回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

  • 關注公眾號
  • 有償服務微信
  • 有償服務QQ

手機版|小黑屋|Discuz! 官方交流社區(qū) ( 皖ICP備16010102號 |皖公網安備34010302002376號 )|網站地圖|star

GMT+8, 2025-7-1 21:42 , Processed in 0.040413 second(s), 10 queries , Redis On.

Powered by Discuz! W1.0 Licensed

Cpoyright © 2001-2025 Discuz! Team.

關燈 在本版發(fā)帖
有償服務QQ
有償服務微信
返回頂部
快速回復 返回頂部 返回列表