《防爆磁力启动器原理与维修》 * 技术教程集合 * PLC入门教程 电工基础教程
论坛使用帮助 PLC视频教程下载 升级VIP用户的方法成伟新帖

[教程] Discuz嵌入点的实战训练教程

[复制链接]
查看2569 | 回复0 | 2014-1-5 15:32:23 | 显示全部楼层 |阅读模式
<
其实纵观DX所有点,均可利用嵌入点来执行二次开发,很多地方没有嵌入点同样可以使用HOOK来进行替换,前面体哥等人出了独立插件页面的流程,今天本人出一个嵌入点实战开发教程。  
这次我们的嵌入点选择了再楼主下方的快捷操作栏,如图:
Snap1.jpg

我们需要在模板输出前调用,所以在嵌入点后面我们要加上_output,下面是创建这个插件以及嵌入点的具体流程:
1) 进入Dx1.5后台,选择插件-插件-设计新插件,名字-版本号-版权信息自填,唯一标识符一定要填写正确(嵌入点的时候需要用到),比如我们这次使用的嵌入点是testhook,然后我们点提交,提交后会出现几个选项:
插件介绍:这里是插件的介绍,非必填
是否含有语言包:非必填,如果需填写,那么需在data\plugindata文件夹下建立语言包文件。 以lang.php为后缀,命名要和唯一标识符相同!。(本教程中不适用语言包)

2)  点击模块-模块类型选择页面嵌入,程序模块输入唯一标识符(并非一样,习惯相同最好),然后确定。

Snap2.jpg

Snap3.jpg

插件创建好以后,我们来写代码,在source\plugin目录下创建一个testhook(一定要以唯一标识符相同)的目录,然后在文件夹下穿件一个PHP文件,此文件与插件创建中的程序模块相同(教程中为:testhook.class.php).
Snap4.jpg

PHP脚本中我们先以基本的语法写入(<?php为<?也行):
1. <?php    ?>

为了安全,我们理当在<?php后面加上判断:
1. if(!defined('IN_DISCUZ')) { 2. exit('Access Denied'); 3. }

然后我们仅需将
class plugin_此处为你的唯一标识符 {  }  

写入即可(这里必写,否则会出错,具体填写方式根据不同人的习惯有不同的方法,此嵌入方式也可以将嵌入点写入这里,在最下面调用全局脚本嵌入,习惯不同,我喜欢将嵌入点写入全局嵌入,此处单独调用)

然后因为这里是在论坛,对应的扩展即是forum,我们写入这样的全局嵌入:


class plugin_此处为你的唯一标识符_forum extends plugin_此处为你的唯一标识符{
//中间嵌入代码
}

上面我们创建的是唯一标识符为:testhook的插件,并且也知道了嵌入点的function:viewthread_useraction
下面我将嵌入写进去,在全局嵌入的注释://中间嵌入代码替换为:

1. function viewthread_useraction_output(){
2. //对viewthread_useraction嵌入点开始function
3. global $_G;
4. //获取全局变量$_G
5. loadcache('plugin');
6. /*嵌入点插件和以 plugin.php 为主脚本调用的插件无需加载此缓存,系统已自动加载了缓存,非必填*/
7. $return='<a href=URL id="share">分享</a>';
8. /*开始嵌入,对输出的变量开始hook,'';符号不能少,这里的嵌入点格式为<a href="" id="">xx</a>的形式,其中id为css中的#{},写入CSS后,这里起到了再此处嵌入前面的小图标。*/
9. return $return;
10. //对嵌入进行输出
11. }

然后保存,到后台更新缓存,到前台看一下,是不是出来了?大功告成!

Snap5.jpg


附上成品..
1. <?php
2.  
3. if(!defined('IN_DISCUZ')){
4. exit('Access Denied');
5. }
6.  
7. class plugin_testhook {
8. var $return = '';
9. }
10.  
11. class plugin_testhook_forum extends plugin_testhook {
12.  
13. function viewthread_useraction_output() {
14. global $_G;
15.  
16. // loadcache('plugin');
17.  
18. $return = '<a href="http://localhost/bbs/forum.php" id="share">啊啊啊啊啊啊啊</a>';
19.  
20. return $return;
21. }
22.  
23. }
24. ?>

热帖推荐
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则