首先开启开发者模式,在config\config_global.php 最下面添加

Java代码  Discuz 插件开发
  1. $_config['plugindeveloper'] = 2;  

刷新后台应用即可.这时在前台论坛页就出现好多类似string global_usernav_extra的东西这就是锚点,也是插件可以利用的点,描点分全局嵌入点和脚本嵌入点,脚本嵌入点写到全局嵌入点类无效

设置完成后.工具->清理缓存

 

后台 ->应用 ->设计新插件
Discuz 插件开发
 

 

插件模块开发

Java代码  Discuz 插件开发
  1. <?php  
  2. /** 
  3.  *  plugin_  普通版脚本中的类名以 plugin_ 开头。手机版脚本中的类名以 mobileplugin_ 开头。 
  4.  *  identifier 插件的唯一标识符,在插件设置中设置。 
  5.  *  CURSCRIPT 嵌入点位于的脚本名,如 forum.php 为 forum。 
  6.  */  
  7. if(!defined('IN_DISCUZ')) {  
  8.     exit('Access Denied');  
  9. }  
  10.   
  11. //全局嵌入点类(必须存在)  
  12. class plugin_identifier {  
  13. }  
  14.   
  15. //脚本嵌入点类  
  16. class plugin_identifier_CURSCRIPT extends plugin_identifier {  
  17. }  

Discuz 插件开发
 

在source/plugin下新建一个文件夹,文件夹的名称要和所要创建的插件的标识符(test)相同。

 

然后在创建的文件夹下面创建您需要的文件。如下图 我在模块里面定义了  页面嵌入的 test1类文件,则需要在插件文件夹中新建一个test1.class.php的文件,下面是需要注意的东西:test1.class.php中 文件的上部分 是discuz的引入部分,而下面的类名必须要和插件的名称一致
Discuz 插件开发

之后在类中书写function函数。这里需要注意的是:只有function的的名称与 外面相应位置显示的名称一致的时候 才会在相应页面中的相应位置中运行。在每次新增加或者修改文件 则尽量刷新下缓存文件
Discuz 插件开发

到此插件已经开发完成,现在需要启用插件(如果在设计插件时已开启可以忽略)
Discuz 插件开发
 

在前台的相应页面刷新后 就会出现我们刚才做的简单的示例。
Discuz 插件开发
 

这里需要注意的是,如果需要在指定位置进行运算的话,进行页面输出的时候尽量不要使用echo 或者var_dump进行输出,因为这样会输出到最顶部,也就是网页的外围部分上。而使用return则会在指定的地方进行输出。值得注意的是,在编写插件的时候,如果确实要输出的话,先按照1步骤后,看下前台所需的页面上有没有。到此,简单的discuz的插件就开发完毕了。

点击导出按钮后导出文件XML文件放在当前插件文件夹的根目录下,直接打包插件目录为rar格式直接的发布给别人就可以正常的使用了。

 

让插件有安装和反安装能力

在导出的XML中加入

Java代码  Discuz 插件开发
  1.     <item id="installfile"><![CDATA[install.php]]></item>  
  2.     <item id="uninstallfile"><![CDATA[uninstall.php]]></item>  
  3. </item>  

上述代码分别表示:安装|卸载插件时会运行的文件,在插件目录下添加install.php和uninstall.php

Java代码  Discuz 插件开发
  1. <?php  
  2. if(!defined('IN_DISCUZ')) {  
  3.     exit('Access Denied');  
  4. }  
  5.   
  6. //各种安装操作  
  7. $sql = <<<EOF  
  8. DROP TABLE IF EXISTS CDB_TABLE_SETTING;  
  9. CREATE TABLE CDB_TABLE_SETTING(  
  10.   `key` varchar(20) not null primary key,  
  11.   `value` text  
  12. ) ENGINE=MYISAM DEFAULT CHARSET=DCHARSET;  
  13. EOF;  
  14. runquery($sql);   //或DB::query($sql);  
  15.   
  16. $finish = TRUE;  
  17. ?>  

 

相关文章: