paip.DISCUZ道具开发指南-attilax总结-

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 ,下copylang_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_descpre_common_magic这个表里,打开表一看,啊,道具设置都保存在这里了...我推测,应该是首次保存道具设置的时候,就把数据保存在这里了。。然后改了open_desc再回后台刷新,果然ok了。。。

然后,就要在前台显示道具了,在后台把道具的显示权限,允许使用本道具的版块:”,这里设置下显示的板块, 道具权限 ,我通通全选了..

可是在前台,我打开一个贴子,准备使用道具是,却发现没有我的“强烈抗议”道具。。再次开始调试,为了方便,我从前台CSSHTML开始跟踪,我用的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><href="。。。。。。“><img >。。。。。。。。</a></li>

<!--{/if}-->

其中的<!--{/if}-->我觉得有问题,写法,写HTML注释不用这么麻烦,又想了下,应该是模块专用语法,好从中提取HTML。。

于是我也复制了其中的一个<li>,照着改动了下,就好了。然后前台贴子片一看,YH,终于OK了。显示出来了,可以使用了..

这样我的第一个discuz X2.5道具开发,就取得了完美的结果.. .......................

Attilax  写于2012.7.9 PM

posted @ 2012-07-09 21:31  attilaxAti  阅读(56)  评论(0编辑  收藏  举报