毫無疑問,作為一款成功的社區(qū)建站軟件,Discuz在很多方面確實(shí)是花了功夫,尤其是是讓數(shù)萬開發(fā)者加入其中,可以這么說,現(xiàn)在Discuz的發(fā)展離不開這些第三方的開發(fā)者。Discuz應(yīng)用中心之所以有這么多開發(fā)者,這得益于其本身的便捷性,讓具備技術(shù)功底的開發(fā)者能夠較快上手對其進(jìn)行二次開發(fā)。
做過Discuz二次開發(fā)的童鞋都知道,我們所需要做的就是增加templat和plugin目錄,也就是通過自定義的插件和模版來改造屬于我們自己個(gè)性化的Discuz。而插件開發(fā)中不可以不得不提的就是插件嵌入點(diǎn)(hook)了,類似的其他開源程序也有類似的概念,就比如說WordPress其實(shí)也有。
我們知道Discuz默認(rèn)情況下有許多自帶的嵌入點(diǎn),我們可以在config/config_global.php加入如下代碼后在網(wǎng)站的前臺查看各個(gè)自帶嵌入點(diǎn)的位置:
$_config['plugindeveloper'] = 2;
可以這么說,這些自帶的嵌入點(diǎn)已經(jīng)幫我們考慮了大多數(shù)頁面嵌入的場景。然而,我們同時(shí)做過插件開發(fā)及模版開發(fā)的童鞋可能就有體會,有時(shí)候當(dāng)我們的某個(gè)插件和自己的某個(gè)模版整合后,我們希望在除默認(rèn)嵌入點(diǎn)之外的位置放上額外的嵌入點(diǎn)。比如我們手機(jī)模版forumdisplay.htm這個(gè)文件中,有其中如下代碼:
<li>
<!--{hook/forumdisplay_thread_mobile $key}-->
<a href="forum.php?mod=viewthread&tid=$thread[tid]&extra=$extra">
<h6>{$thread[subject]}</h6>
.......
</a>
</li>
|
這里官方的默認(rèn)嵌入點(diǎn)已經(jīng)給了我們在這條記錄上方的一個(gè)嵌入點(diǎn),這個(gè)嵌入點(diǎn)可以讓我們通過插件來操作這一部分內(nèi)容。但我們有時(shí)候想在h6的下方嵌入內(nèi)容,那怎么辦呢?當(dāng)然不是一定需要自定義嵌入點(diǎn),各位民間開發(fā)者自然有自己的神奇的技巧,但我只想說如果有自定義嵌入點(diǎn)該多好啊。
我們能想到,那就意味著Discuz可能已經(jīng)做到。沒錯!確實(shí)做到了,從其官方文檔(傳送門)我們可以知道是支持自定義嵌入點(diǎn)的,而且實(shí)現(xiàn)起來非常簡單。但是據(jù)了解,部分人看文檔的時(shí)候可能會覺得文檔不好理解,有時(shí)候甚至搞半天才成功執(zhí)行。文檔原文為:
函數(shù)名并不限于以上列表,您可以自定義,只要符合以下規(guī)則,函數(shù)就會在適當(dāng)?shù)牡胤奖徽{(diào)用。
function CURMODULE_USERDEFINE[_output]()
CURMODULE指明了此函數(shù)在哪個(gè)模塊執(zhí)行,可通過常量 CURMODULE 得到當(dāng)前頁面的 CURMODULE 值。 USERDEFINE 可自定義,如果函數(shù)名以“_output”結(jié)尾則會在模板輸出前調(diào)用,否則會在模塊執(zhí)行前調(diào)用。
其實(shí)很簡單,意思就是只要是[腳本名_自定義名稱]即可,而CURMODULE常量就是代表當(dāng)前的腳本名稱,比如論壇的首頁的CURMODULE值應(yīng)該是forum,不同頁面中我們可以輸出下常量就知道是什么,后面就是下劃線,接著就是我們自定義的其他名稱(建議這個(gè)名稱是有意義的,讓他人和你自己一看這個(gè)函數(shù)名稱就知道這個(gè)插件大概干嘛,當(dāng)然這也是通常的命名規(guī)則)。
一個(gè)實(shí)例
還是拿剛才最開始舉的例子來說,就是那個(gè)說在手機(jī)頁面的。這個(gè)頁面就是手機(jī)版的主題列表頁面,自定義的位置就是用來顯示由插件讀取出來的主題的前四張附件圖片。對應(yīng)的這個(gè)類的主體代碼如下:
//全局嵌入點(diǎn)類
class mobileplugin_muquan_m_seting {
//代碼塊
}
//腳本嵌入點(diǎn)類
class mobileplugin_muquan_m_seting_forum extends mobileplugin_muquan_m_seting{
//讀取前面四張附件圖片的方法,用于顯示在主題列表中
public function forumdisplay_threadsimglist_output(){
//代碼塊
}
//其他方法
}
|
其中forumdisplay_threadsimglist_output這個(gè)方法就是為了自定義嵌入點(diǎn)而創(chuàng)造的,而其中的forumdisplay就是CURMODULE,threadsimglist就是USERDEFINE。在模版中的嵌入點(diǎn)為
<!--{hook/forumdisplay_threadsimglist $key}-->
相信到這里,大家結(jié)合官方文檔應(yīng)該知道如何自定義前端點(diǎn)了,以上實(shí)例是我開發(fā)的的一個(gè)插件的部分代碼,所以肯定是可以實(shí)現(xiàn)的的。如果在實(shí)踐中遇到問題,歡迎留言或者聯(lián)系我交流。