首先开启开发者模式,在config\config_global.php 最下面添加
$_config['plugindeveloper'] = 2;
刷新后台应用即可.这时在前台论坛页就出现好多类似string global_usernav_extra的东西这就是锚点,也是插件可以利用的点,描点分全局嵌入点和脚本嵌入点,脚本嵌入点写到全局嵌入点类无效。
设置完成后.工具->清理缓存
后台 ->应用 ->设计新插件
插件模块开发
<?php
/**
* plugin_ 普通版脚本中的类名以 plugin_ 开头。手机版脚本中的类名以 mobileplugin_ 开头。
* identifier 插件的唯一标识符,在插件设置中设置。
* CURSCRIPT 嵌入点位于的脚本名,如 forum.php 为 forum。
*/
if(!defined('IN_DISCUZ')) {
exit('Access Denied');
}
//全局嵌入点类(必须存在)
class plugin_identifier {
}
//脚本嵌入点类
class plugin_identifier_CURSCRIPT extends plugin_identifier {
}
在source/plugin下新建一个文件夹,文件夹的名称要和所要创建的插件的标识符(test)相同。
然后在创建的文件夹下面创建您需要的文件。如下图 我在模块里面定义了 页面嵌入的 test1类文件,则需要在插件文件夹中新建一个test1.class.php的文件,下面是需要注意的东西:test1.class.php中 文件的上部分 是discuz的引入部分,而下面的类名必须要和插件的名称一致。
之后在类中书写function函数。这里需要注意的是:只有function的的名称与 外面相应位置显示的名称一致的时候 才会在相应页面中的相应位置中运行。在每次新增加或者修改文件 则尽量刷新下缓存文件
到此插件已经开发完成,现在需要启用插件(如果在设计插件时已开启可以忽略)
在前台的相应页面刷新后 就会出现我们刚才做的简单的示例。
这里需要注意的是,如果需要在指定位置进行运算的话,进行页面输出的时候尽量不要使用echo 或者var_dump进行输出,因为这样会输出到最顶部,也就是网页的外围部分上。而使用return则会在指定的地方进行输出。值得注意的是,在编写插件的时候,如果确实要输出的话,先按照1步骤后,看下前台所需的页面上有没有。到此,简单的discuz的插件就开发完毕了。
点击导出按钮后导出文件XML文件放在当前插件文件夹的根目录下,直接打包插件目录为rar格式直接的发布给别人就可以正常的使用了。
让插件有安装和反安装能力
在导出的XML中加入
<item id="installfile"><![CDATA[install.php]]></item>
<item id="uninstallfile"><![CDATA[uninstall.php]]></item>
</item>
上述代码分别表示:安装|卸载插件时会运行的文件,在插件目录下添加install.php和uninstall.php
<?php
if(!defined('IN_DISCUZ')) {
exit('Access Denied');
}
//各种安装操作
$sql = <<<EOF
DROP TABLE IF EXISTS CDB_TABLE_SETTING;
CREATE TABLE CDB_TABLE_SETTING(
`key` varchar(20) not null primary key,
`value` text
) ENGINE=MYISAM DEFAULT CHARSET=DCHARSET;
EOF;
runquery($sql); //或DB::query($sql);
$finish = TRUE;
?>