本文實作功能:
控制彈框的顯示與否
功能使用情境
在先前的文章寫道,discuz實作自動註冊登入。但是我們又不想讓那個提示訊息出來。
在網路上大概的搜尋了一下,有的說後台可以設置,但是咔咔到後邊瞅了一眼,它那個設置只是針對於固定的一些場景。
那麼我們自己可以來寫一個適合我們專案的顯示方式
彈框實現剖析
使用discuz一段時間的都知道,前台的彈框其實是後台showmessage
這個方法決定的。
我們用程式碼追蹤到這個方法在upload/source/function/function_core.php
檔案裡 大概在1424行
![1588522583349539.png discuz如何自主控制彈框的顯示](https://img.php.cn/upload/image/863/963/378/1588522583349539.png)
然後我們在追蹤dshowmessage
這個方法
最終這個方法的檔案是在upload/source/function/function_message.php
# 這裡
然後我們把程式碼拉到最後,可以看到一個show_messge
的變數和載入了一個模板位址
![1588522706635664.png discuz如何自主控制彈框的顯示](https://img.php.cn/upload/image/886/256/804/1588522706635664.png)
##這個時候我們就去找這個模板位置:
upload/template/default/touch/common/showmessage.htm
在這個模板裡邊我們就能看到一個變數為
show_message 。
![1588522800443398.png discuz如何自主控制彈框的顯示](https://img.php.cn/upload/image/292/933/812/1588522800443398.png)
為了確認模板裡的show_message和PHP檔案裡邊的show_message是一致的我們來做個測試
修改:
upload /source/function/function_message.php # 238行
![1588522939929994.png discuz如何自主控制彈框的顯示](https://img.php.cn/upload/image/887/269/233/1588522939929994.png)
然後在頁面進行測試所得的結果是沒有問題的。兩個變數是一致的
![1588523003868288.png discuz如何自主控制彈框的顯示](https://img.php.cn/upload/image/636/311/941/1588523003868288.png)
實作自己的顯示方式
經過上邊的測試,我們得知upload/source/function/function_message.php 文件的238行的show_message 與模板 upload/template/default/touch/common/showmessage.htm的show_message一致。
那麼我們就可以聲明一個變量,如果是你想顯示自己的樣式就聲明一個變量,然後在模板裡邊控制
以下是咔咔案例:只要你有這個需求咔咔的這個方案100%可以解決你的問題
這段程式碼是判斷用戶是否註冊了,如果註冊了就直接登入。 (這裡無需糾結,咔咔的案例是從原始系統過來的。)
#可以看到在showmessage中我新增了一個變數為is_login,並且值為1
![1588523273716439.png discuz如何自主控制彈框的顯示](https://img.php.cn/upload/image/425/356/144/1588523273716439.png)
我們既然需要在模板裡使用這個值,那就照貓畫虎,在upload/source/function/function_message.php檔案裡也把is_login宣告為全域變數
![1588523477643076.png discuz如何自主控制彈框的顯示](https://img.php.cn/upload/image/464/508/455/1588523477643076.png)
然後拿著這個值你就可以在upload/template/default/touch/common/showmessage.htm模板裡邊使用了
在這個裡面加上你自己的if就可以了
![1588523537641748.png discuz如何自主控制彈框的顯示](https://img.php.cn/upload/image/522/719/548/1588523537641748.png)
還有一個特別簡單的方式就是在upload/source/function/function_message.php這個239行控制進入的模板
![1588523625592136.png discuz如何自主控制彈框的顯示](https://img.php.cn/upload/image/194/711/234/1588523625592136.png)
那麼這個時候需要做些什麼呢!就是建造這個模板了
在upload/template/default/touch/common這個目錄下複製這個showmassge這個文件
##然後修改這個文件,讓進入後直接跳轉即可。
實作效果
登入時彈框已經沒有了
![1588523888405137.png discuz如何自主控制彈框的顯示](https://img.php.cn/upload/image/449/508/164/1588523888405137.png)
在其他地方該有的還是有的
![1588523928505211.png discuz如何自主控制彈框的顯示](https://img.php.cn/upload/image/612/913/449/1588523928505211.png)
#總結
在把本文的文件都修改完了以後呢!在一會想要使用自己定義的模板就可以直接使用
is_login就是你自訂模板的一個標識
showmessage('login_succeed', 'forum.php',['username'=>$username,'is_login'=>1],array('showdialog' => 1));
登入後複製
以上是discuz如何自主控制彈框的顯示的詳細內容。更多資訊請關注PHP中文網其他相關文章!