paip.DISCUZ道具開發指南-attilax總結-javascript
今天我要開發一款DISCUZ X2.5 道具,名字就叫「強烈抗議」,場景以下:一天,某我的看了別人一篇貼子,以爲滿篇都是胡說八道, 只要用了「強烈抗議」這個道具,這個貼子就會被隱藏起來一段時間,全部人都看不到了。。php
說動手就動手。java
道具管理後臺:http://127.0.0.1/m_dx/admin.phpnode
管理中心>運營>道具中心..數據庫
先去道具中心看了款「喧囂卡」,這個道具,就以這個爲原形了,它的圖片地址是static/image/magic/open.gif ,因而我也弄了個 「強烈抗議」圖片,名爲 del.gif ,放入其目錄下,ide
其中還有個小圖片*.small.gif,應該是前臺顯示小圖用的,也作了個小圖片del.small.gif 。post
而後,要增長道具了,搜索了下可先看看官方道具開發手冊,位置:歡迎來到 Discuz! 技術文庫>3.歡迎來到 Discuz! 技術文庫>3.3 3.3 插件機制 >第三方拓展類的開發 > 道具類測試
主要說明有下:ui
腳本位置:source/class/magic/*.phpthis
語言包位置:source/language/magic/*.php
..........................
............................
因而,來到source/class/magic/目錄,把open.php,這個是「喧囂卡」的PHP,我直接copy了下,更名爲del.php,這樣個人腳本就差很少了,打開del.php,看了下,主要有三行要注意看下..
var $name = 'open_name'; //道具名稱
var $description = 'open_desc'; //道具描述
'title' => 'open_forum', //道具描述
而後,我到語言包位置:source/language/magic/*.php ,下copy了lang_open.php,這個是「喧囂卡」的語言包,更名爲lang_del.php,而後把open_name,open_desc等描述改動成本身的...
而後在 del.php 中 usesubmit(),這個是重點,指名道具使用後的動做代碼。。。寫了下。。把動做代碼寫好。。
接着,我在後臺道具中心測試道具,發現已經多了一行,道具已經顯示出來了,名字是「強烈抗議」,不過圖片沒有顯示出來..啊,
只好先調試解決圖片不出來的問題:
---------------後臺不能顯示道具圖片的調試-------------
1.admin.php
require discuz_admincp->admincpfile($action);
return './source/admincp/admincp_'.$action.'.php';
2. source/admincp/admincp_magics.php
line 52 (file_exists(DISCUZ_ROOT.'./static/image/magic/'.$magic['identifier'].'.gif') ? '<img class="vmiddle" src="static/image/magic/'.$magic['identifier'].'.gif" />' : '') ,
其中這裏有圖片的URL,可斷點打出來看具體狀況...
3 .其中我看了下讀取圖片的代碼 ,讀取道具圖片流程--------------
DISCUZ讀取道具圖片的名字,主要根據腳本位置:source/class/magic/*.php,來的,,,
主要代碼以下:
source/admincp/admincp_magics.php
function getmagics() {
global $_G;
$dir = DISCUZ_ROOT.'./source/class/magic';
$magicdir = dir($dir);
$magics = array();
while($entry = $magicdir->read()) {
通過個人調試,原來是圖片文件名拼錯了,回到static/image/magic/下,把圖片名字改好了。就OK了。。
此時,後臺道具中心界面,新加的道具圖片顯示出來了,而後保存了下設置。。。發現有個英文字串open_desc改不掉。。但是我明明在語言包都設置好了啊。查了下PHP文件,發現沒問題,我估計應該在數據庫表裏,因此我要檢索整個數據庫查出來。。先將數據庫導出爲SQL文件,而後檢索,發現open_desc在pre_common_magic這個表裏,打開表一看,啊,道具設置都保存在這裏了...我推測,應該是首次保存道具設置的時候,就把數據保存在這裏了。。而後改了open_desc,再回後臺刷新,果真ok了。。。
而後,就要在前臺顯示道具了,在後臺把道具的顯示權限,「容許使用本道具的版塊:」,這裏設置下顯示的板塊, 道具權限 ,我統統全選了..
但是在前臺,我打開一個貼子,準備使用道具是,卻發現沒有個人「強烈抗議」道具。。再次開始調試,爲了方便,我從前臺CSS,HTML開始跟蹤,我用的IE9,直接F12,跟蹤到 「使用道具「,這個這串附近,代碼以下:
<p>
<a href="javascript:;" id="mgc_post_1" onmouseover="showMenu(this.id)" class="showmenu">使用道具</a>
</p>
<ul id="mgc_post_1_menu" class="p_pop mgcmn" style="display: none;">
<li><a href="home.php?mod=magic&mid=bump&idtype=tid&id=1" id="a_bump" onclick="showWindow(this.id, this.href)"><img src="static/image/magic/bump.small.gif" />提高卡</a></li>
<li><a href="home.php?mod=magic&mid=stick&idtype=tid&id=1" id="a_stick" onclick="showWindow(this.id, this.href)"><img src="static/image/magic/stick.small.gif" />置頂卡</a></li>
重點是這個<ul>,我把它的ID mgc_post_1_menu 檢索了全部文件沒發現,又在數據庫裏檢索,也沒發現....我推測多是拼接成的,因而只檢索前半部分mgc_post, 果真在PHP文件中發現了,templatedefaultforumviewthread_node.htm ,這個是在模板裏啊。打開一看,附近代碼以下,再綜合class="p_pop mgcmn" 這個判斷,就是它了..
<ul id="mgc_post_$post[pid]_menu" class="p_pop mgcmn" style="display: none;">
<!--{if $post['first']}-->
<!--{if !empty($_G['setting']['magics']['del'])}-->
<li><a href="。。。。。。「><img >。。。。。。。。</a></li>
<!--{/if}-->
其中的<!--{/if}-->,我以爲有問題,寫法,寫HTML註釋不用這麼麻煩,又想了下,應該是模塊專用語法,好從中提取HTML。。
因而我也複製了其中的一個<li>,照着改動了下,就行了。而後前臺貼子片一看,YH,終於OK了。顯示出來了,可使用了..
這樣個人第一個discuz X2.5道具開發,就取得了完美的結果.. .......................
Attilax 寫於2012.7.9 PM