paip.DISCUZ道具開發指南-attilax總結-

來源:互聯網
上載者:User

paip.DISCUZ道具開發指南-attilax總結-

今天我要開發一款DISCUZ  X2.5 道具,名字就叫“強烈抗議”,情境如下:一天,某個人看了別人一篇貼子,覺得滿篇都是胡說八道, 只要用了“強烈抗議”這個道具,這個貼子就會被隱藏起來一段時間,所有人都看不到了。。

說動手就動手。

道具管理後台:http://127.0.0.1/m_dx/admin.php

管理中心>運營>道具中心..

先去道具中心看了款“喧囂卡”,這個道具,就以這個為原形了,它的圖片地址是static/image/magic/open.gif ,於是我也弄了個 “強烈抗議”圖片,名為 del.gif ,放入其目錄下,

其中還有個小圖片*.small.gif,應該是前台顯示小圖用的,也做了個小圖片del.small.gif 。

然後,要增加道具了,搜尋了下可先看看官方道具開發手冊,位置:歡迎來到 Discuz! 技術文庫>3.歡迎來到 Discuz! 技術文庫>3.3 3.3 外掛程式機制 >第三方拓展類的開發 > 道具類

主要說明有下:

指令碼位置:source/class/magic/*.php

語言套件位置: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檔案中發現了,template\default\forum\viewthread_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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.