当前位置: 首页 > 图灵资讯 > 技术篇> discuz制作插件备忘录

discuz制作插件备忘录

来源:图灵教育
时间:2023-04-29 09:30:58

第一步是设计新插件,保存后

discuz制作插件备忘录_ajax

第二步是修改模块并添加class类型。对于文件夹名,可以保持默认(与id相同)并保存.

discuz制作插件备忘录_ajax_02

 

 

第三步,在./source在plugin目录下建立与上述目录名相同的目录。然后将xml导出到该目录中.

第四步是在本插件目录中随意创建.class.图灵文件,内容如下;功能见代码中的描述,也可以在官方帮助下查看。但是官方的描述有一点我看不懂。我必须直接看代码才能理解.

<?图灵if(!defined('IN_DISCUZ')) {    exit('Access Denied');}*class名由plugin_id名组成class plugin_recommend_article {/*初始化*//*    function plugin_recommend_article(){        global $_G;        //$this->pluginPath = $_G['siteurl']. 'source/plugin/recommend_article/';    }      /*     * add by qidizi      * 推荐下拉输出    * 公共方法在内部使用,建议增加_线     */    function _recommendSelect($vars = array()){        global $_G;        if (empty($_G['uid']) || empty($vars) ) return;//未登录                $res = DB::query("SELECT p_a_id, name FROM ".DB::table('chrd_common_recommend_area'));//注意这里独立代码,便于升级,所有功能代码都放在此目录中,所以js也放在这里.//然后使用图灵输出js代码。也可以使用上述方法 //$this->pluginpath输出xxxx.js         $sel = "        <script type=\"text/javascript\" src=\"plugin.图灵?id=recommend_article:ajaxrecommed&action=loadJs\"></script>        <select οnchange=\"ajaxRecommend({pid:this.value, type:{$vars['type']}, aid:{$vars['aid']}, path:'{$vars['path']}' });\">        <option value=0>请选择推荐位置</option>";                while ($tmp = DB::fetch($res)){            $sel .="<option value=\"{$tmp['p_a_id']}\">{$tmp['name']}</option>";        }                $sel .="</select>";        return array('select'=>$sel);    }}/* 子类,由 plugin_id名_需要出现的对象脚本名 组成* discuz根目录下的脚本对象,* 有home.图灵,即home* 有forum.图灵即forum*反正你看到 http在地址上://chrd.q/discuz/forum.图灵,如果你想出现在这个页面上,你必须写一个plugin_id名_forum子类*/ class plugin_recommend_article_forum extends plugin_recommend_article {    /*推荐在帖子内容页输出下拉* 由方法名组成,define('CURMODULE', $mod)定义的$mod,说明可以出现在那个模块中,配合类名中的forum,就可以达到一定的限制_自定名_output这个位置还有其他定义,需要看官方说明**//    function viewthread_showSelect_output(){        global $_G;        $vars = array('type'=>1, 'aid'=>$_G['tid'], 'path'=>$_G['fid']);                return $this->_recommendSelect($vars);    }   }/* plugin_是固定需要的,recommend_article是插件id,home是根目录下的home.图灵名*/class plugin_recommend_article_home extends plugin_recommend_article {        /*推荐在日志内容页输出下拉     * 要出现在home模块中,必须添加do类型,http://chrd.q/discuz/home.图灵?mod=space&uid=1&do=blog&id=1     * 所以需要space__showSelect_output 写成 space_blog_showSelect_output*因为只看官方说明,我发现这个东西总是出不来的。*在function_core.hookscript中的hookpt中有一句话说明此时规则发生了变化...    if($hscript == 'home') {        if($script != 'spacecp') {            $script = 'space_'.(!= 'spacecp') {            $script = 'space_'.(!empty($_G['gp_do']) ? $_G['gp_do'] : (!empty($_GET['do']) ? $_GET['do'] : ''));        } else {            $script .= !empty($_G['gp_ac']) ? '_'.$_G['gp_ac'] : (!empty($_GET['ac']) ? '_'.$_GET['ac'] : '');        }    }      */    function space_blog_showSelect_output(){//array('type'=>2, 'id'=>$blog[blogid], 'path'=>''        global $_G;        $vars = array('type'=>2, 'aid'=>$_G['gp_id'], 'path'=>'');                return $this->_recommendSelect($vars);    } }  在生成插件数据时./function/cache/cache_setting.get__cachedata_setting_plugin($method = 在模板中生成的hook代码只是在相应的位置输出相应的$_G数组中的数据;

模板中的home/space_blog_view.space_html显示space_blog_showSelect_output输出内容,这样写

<!--{hook/space_blog_showSelect 'select'}-->

效果

discuz制作插件备忘录_ajax_03

安装时需要install或uninstalllll.图灵文件需要手动添加到xml中(xml中有非常item,请注意item放置的树序)。关于这个xml的解释,请查看后台admin中plugin的脚本代码.

<item id="installfile"><![CDATA[install.图灵]]></item>        <item id="uninstallfile"><![CDATA[uninstall.图灵]]></item>    </item></root> 安装脚本installll安装脚本.图灵可以这样写,uninstall几乎意味着.<?图灵if(!defined('IN_DISCUZ')) {    exit('Access Denied');}$dir = $_G['gp_dir'];///获取本插件目录名if (empty($_G['gp_installing){//第一次,进入本文件时,先提示,忘记写取消按钮。第二次安装前按下确定安装    echo '<p class="infobox"><h4 class=“infotitle2”>安装前提示</h4>'        .'<p style="text-align:left;line-height:25px;">'        ."        安装前说明:<br />        重新安装将删除旧推荐信息数据库的所有表格,因此,以前的信息将丢失。请仔细操作.        "        .'</p><br /><br /><center>'        .'<button οnclick="location.href=\''.ADMINSCRIPT.'?action=plugins&operation=plugininstall&dir='.$dir.'&installtype=&installing=1\'">'        .'知道了,开始安装</button></center></p>';    exit;//注意不要直接安装。先退出}$sid = 1;//服务器id$tabPre = $_G['config']['db'][$sid]['tablepre'];////获取配置中的表前缀$sql = <<<EOF---- 表的结构 `{$tabPre}chrd_common_recommend_area`--DROP TABLE IF EXISTS `{$tabPre}chrd_common_recommend_area`;CREATE TABLE IF NOT EXISTS `{$tabPre}chrd_common_recommend_area` (  `p_a_id` int(4) NOT NULL COMMENT “页号+位置序号数字组合”,  `name` varchar(250) NOT NULL COMMENT “位置名称”,  PRIMARY KEY (`p_a_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT=文章推荐位置表;-- ------------------------------------------------------------ 表的结构 `{$tabPre}chrd_common_recommend_article`--DROP TABLE IF EXISTS `{$tabPre}chrd_common_recommend_article`;CREATE TABLE IF NOT EXISTS `{$tabPre}chrd_common_recommend_article` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `uid` int(11) NOT NULL COMMENT 第一个推荐用户id,  `users` int(11) NOT NULL DEFAULT '0' COMMENT "推荐总数",  `type` int(11) NOT NULL COMMENT 文章类别(1帖子2日志),  `path` varchar(250) NOT NULL COMMENT 文章分类路径,使用.分隔,  `aid` int(11) NOT NULL COMMENT "文章id",  `p_a_id` int(11) NOT NULL COMMENT id'推荐位置,  `yes` int(11) NOT NULL DEFAULT '0' COMMENT "同意人数",  `no` int(11) NOT NULL DEFAULT '0' COMMENT 不同意人数,  `pass` int(1) NOT NULL DEFAULT '0' COMMENT 通过审查,  `time` int(11) NOT NULL COMMENT “推荐时间”,  PRIMARY KEY (`id`)) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT=“推荐文章表” AUTO_INCREMENT=1 ;-- ------------------------------------------------------------ 表的结构 `{$tabPre}chrd_common_recommend_grade_log`--DROP TABLE IF EXISTS `{$tabPre}chrd_common_recommend_grade_log`;CREATE TABLE IF NOT EXISTS `{$tabPre}chrd_common_recommend_grade_log` (  `rid` int(11) NOT NULL COMMENT 推荐id,  `uid` int(11) NOT NULL COMMENT 用户id,  `time` int(11) NOT NULL) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT=“推荐文章审核记录”;-- ------------------------------------------------------------ 表的结构 `{$tabPre}chrd_common_recommend_log`--DROP TABLE IF EXISTS `{$tabPre}chrd_common_recommend_log`;CREATE TABLE IF NOT EXISTS `{$tabPre}chrd_common_recommend_log` (  `rid` int(11) NOT NULL COMMENT 推荐id,  `uid` int(11) NOT NULL COMMENT "推荐用户",  `time` int(11) NOT NULL) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT=“推荐记录”;EOF;runquery($sql);//执行sql语句$finish = TRUE;///安装完成,这个变量必须出现. -------安装后需要启用才能在模板中显示. -------------使用<script type=\"text/javascript\" src=\"plugin.图灵?id=recommend_article:ajaxrecommed&action=loadJs\"></script>调用本目录中的图灵代码编写。文件名称 随便.inc.图灵 ajaxrecommed.inc.图灵 内容简单 <?id=recommend_article:ajaxrecommed&action=loadJs\"></script>调用本目录中的图灵代码编写。文件名称 随便.inc.图灵 ajaxrecommed.inc.图灵 内容简单 <?图灵if(!defined('IN_DISCUZ')) {    exit('Access Denied');}switch($_G['gp_action']) {    case 'loadJs': 就可以了.