国产又猛又爽又黄视频|在线观看人成视频免费|少妇高潮太爽了在线视频|911国产免费无码专区|特黄做受又大又粗又长大片|欧美一级二级免费在线观看|日日夜人人澡人人澡人人看免|欧洲午夜精品一级毛片在线播放

詳解Discuz插件開發(fā)之自定義頁面嵌入點

2015-10-05 09:54 欄目:技術(shù)開發(fā) 查看(30485)

毫無疑問,作為一款成功的社區(qū)建站軟件,Discuz在很多方面確實是花了功夫,尤其是是讓數(shù)萬開發(fā)者加入其中,可以這么說,現(xiàn)在Discuz的發(fā)展離不開這些第三方的開發(fā)者。Discuz應(yīng)用中心之所以有這么多開發(fā)者,這得益于其本身的便捷性,讓具備技術(shù)功底的開發(fā)者能夠較快上手對其進行二次開發(fā)。

做過Discuz二次開發(fā)的童鞋都知道,我們所需要做的就是增加templat和plugin目錄,也就是通過自定義的插件和模版來改造屬于我們自己個性化的Discuz。而插件開發(fā)中不可以不得不提的就是插件嵌入點(hook)了,類似的其他開源程序也有類似的概念,就比如說WordPress其實也有。

我們知道Discuz默認情況下有許多自帶的嵌入點,我們可以在config/config_global.php加入如下代碼后在網(wǎng)站的前臺查看各個自帶嵌入點的位置:

$_config['plugindeveloper'] = 2;

可以這么說,這些自帶的嵌入點已經(jīng)幫我們考慮了大多數(shù)頁面嵌入的場景。然而,我們同時做過插件開發(fā)及模版開發(fā)的童鞋可能就有體會,有時候當我們的某個插件和自己的某個模版整合后,我們希望在除默認嵌入點之外的位置放上額外的嵌入點。比如我們手機模版forumdisplay.htm這個文件中,有其中如下代碼:

<li>
<!--{hook/forumdisplay_thread_mobile $key}-->
<a href="forum.php?mod=viewthread&amp;tid=$thread[tid]&amp;extra=$extra">
<h6>{$thread[subject]}</h6>
.......
</a>
</li>

這里官方的默認嵌入點已經(jīng)給了我們在這條記錄上方的一個嵌入點,這個嵌入點可以讓我們通過插件來操作這一部分內(nèi)容。但我們有時候想在h6的下方嵌入內(nèi)容,那怎么辦呢?當然不是一定需要自定義嵌入點,各位民間開發(fā)者自然有自己的神奇的技巧,但我只想說如果有自定義嵌入點該多好啊。

我們能想到,那就意味著Discuz可能已經(jīng)做到。沒錯!確實做到了,從其官方文檔(傳送門)我們可以知道是支持自定義嵌入點的,而且實現(xiàn)起來非常簡單。但是據(jù)了解,部分人看文檔的時候可能會覺得文檔不好理解,有時候甚至搞半天才成功執(zhí)行。文檔原文為:

函數(shù)名并不限于以上列表,您可以自定義,只要符合以下規(guī)則,函數(shù)就會在適當?shù)牡胤奖徽{(diào)用。

function CURMODULE_USERDEFINE[_output]()

CURMODULE指明了此函數(shù)在哪個模塊執(zhí)行,可通過常量 CURMODULE 得到當前頁面的 CURMODULE 值。 USERDEFINE 可自定義,如果函數(shù)名以“_output”結(jié)尾則會在模板輸出前調(diào)用,否則會在模塊執(zhí)行前調(diào)用。

其實很簡單,意思就是只要是[腳本名_自定義名稱]即可,而CURMODULE常量就是代表當前的腳本名稱,比如論壇的首頁的CURMODULE值應(yīng)該是forum,不同頁面中我們可以輸出下常量就知道是什么,后面就是下劃線,接著就是我們自定義的其他名稱(建議這個名稱是有意義的,讓他人和你自己一看這個函數(shù)名稱就知道這個插件大概干嘛,當然這也是通常的命名規(guī)則)。

一個實例

還是拿剛才最開始舉的例子來說,就是那個說在手機頁面的。這個頁面就是手機版的主題列表頁面,自定義的位置就是用來顯示由插件讀取出來的主題的前四張附件圖片。對應(yīng)的這個類的主體代碼如下:

//全局嵌入點類
class mobileplugin_muquan_m_seting {
  //代碼塊
}

//腳本嵌入點類
class mobileplugin_muquan_m_seting_forum extends mobileplugin_muquan_m_seting{
     //讀取前面四張附件圖片的方法,用于顯示在主題列表中
     public function forumdisplay_threadsimglist_output(){
       //代碼塊
     }
     //其他方法
}

其中forumdisplay_threadsimglist_output這個方法就是為了自定義嵌入點而創(chuàng)造的,而其中的forumdisplay就是CURMODULE,threadsimglist就是USERDEFINE。在模版中的嵌入點為

<!--{hook/forumdisplay_threadsimglist $key}-->

相信到這里,大家結(jié)合官方文檔應(yīng)該知道如何自定義嵌入點了,以上實例是我開發(fā)的的一個插件的部分代碼,所以肯定是可以實現(xiàn)的的。如果在實踐中遇到問題,歡迎留言或者聯(lián)系我交流。

與我們的項目經(jīng)理聯(lián)系
掃二維碼與項目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流

轉(zhuǎn)載請注明出處:詳解Discuz插件開發(fā)之自定義頁面嵌入點 - 微構(gòu)網(wǎng)絡(luò)
分享: