兔源码网 - 专注DZ模版分享、DZ插件分享!

 找回密码
 立即注册

QQ登录

只需一步,快速开始

广告
温馨提示:本站所有DZ相关模板、插件、教程(包括DZ应用中心已下架插件、模板)所有用户可全部免费下载,无任何收费模式(不包括VIP版块非DZ资源,VIP版块需购买会员组方可下载),如本站没有您需要的插件或模板,请自行前往淘宝互站网送吗网等第三方站点搜索相关插件或模板进行低价格购买下载本站非常不建议用户浪费金钱前往DZ应用中心购买。

详解Discuz插件开发之自定义页面嵌入点

[复制链接]
tuyuanma 发表于 2017-4-6 10:06:44 | 显示全部楼层 |阅读模式
温馨提醒:禁止内容附带广告图片、二维码图片,否则将在不通知情况下永久禁言账号!
欢迎加入兔源码站长交流群,您的加入是我们前行的动力!

DZ站长建站交流群:493651246

[ 温馨提示:点击上方群文字,可快速加入QQ群 ]


毫无疑问,作为一款成功的社区建站软件,Discuz在很多方面确实是花了功夫,尤其是是让数万开发者加入其中,可以这么说,现在Discuz的发展离不开这些第三方的开发者。Discuz应用中心之所以有这么多开发者,这得益于其本身的便捷性,让具备技术功底的开发者能够较快上手对其进行二次开发。

" V& h/ U) \" Q* c' \2 ]% f

做过Discuz二次开发的童鞋都知道,我们所需要做的就是增加templat和plugin目录,也就是通过自定义的插件和模版来改造属于我们自己个性化的Discuz。而插件开发中不可以不得不提的就是插件嵌入点(hook)了,类似的其他开源程序也有类似的概念,就比如说WordPress其实也有。


5 F, @: t8 D; }9 t" m4 T5 F' e- ]

我们知道Discuz默认情况下有许多自带的嵌入点,我们可以在config/config_global.php加入如下代码后在网站的前台查看各个自带嵌入点的位置:

  1. $_config['plugindeveloper'] = 2;
复制代码

可以这么说,这些自带的嵌入点已经帮我们考虑了大多数页面嵌入的场景。然而,我们同时做过插件开发及模版开发的童鞋可能就有体会,有时候当我们的某个插件和自己的某个模版整合后,我们希望在除默认嵌入点之外的位置放上额外的嵌入点。比如我们手机模版forumdisplay.htm这个文件中,有其中如下代码:


6 k& Q* e1 d5 w* @; j, M

  1. <li>4 k3 f9 F. X  J3 `2 V# l, s9 U2 l
  2. <!--{hook/forumdisplay_thread_mobile $key}-->
    7 t, }# C: d+ d; ?: e
  3. <a href="forum.php?mod=viewthread&tid=$thread[tid]&extra=$extra">/ {+ n) A0 F( d( c0 Z) _
  4. <h6>{$thread[subject]}</h6>- x% ^% W5 A6 [$ K7 x
  5. .......: w2 c* y" @* |# F( |
  6. </a>8 f/ v7 t2 U! x' E# [. E4 t* {
  7. </li>
复制代码

这里官方的默认嵌入点已经给了我们在这条记录上方的一个嵌入点,这个嵌入点可以让我们通过插件来操作这一部分内容。但我们有时候想在h6的下方嵌入内容,那怎么办呢?当然不是一定需要自定义嵌入点,各位民间开发者自然有自己的神奇的技巧,但我只想说如果有自定义嵌入点该多好啊。


4 J" `5 m/ e! K* m: Z4 t' W

我们能想到,那就意味着Discuz可能已经做到。没错!确实做到了,从其官方文档(传送门)我们可以知道是支持自定义嵌入点的,而且实现起来非常简单。但是据了解,部分人看文档的时候可能会觉得文档不好理解,有时候甚至搞半天才成功执行。文档原文为:

- Y2 t6 Q8 v8 _" J

函数名并不限于以上列表,您可以自定义,只要符合以下规则,函数就会在适当的地方被调用。
/ M* C# Z3 o, N0 v7 ufunction CURMODULE_USERDEFINE[_output]()
( O7 Q% N% }; I& V/ NCURMODULE指明了此函数在哪个模块执行,可通过常量 CURMODULE 得到当前页面的 CURMODULE 值。 USERDEFINE 可自定义,如果函数名以“_output”结尾则会在模板输出前调用,否则会在模块执行前调用。
# I0 A! t: G7 Z0 M9 H

其实很简单,意思就是只要是[脚本名_自定义名称]即可,而CURMODULE常量就是代表当前的脚本名称,比如论坛的首页的CURMODULE值应该是forum,不同页面中我们可以输出下常量就知道是什么,后面就是下划线,接着就是我们自定义的其他名称(建议这个名称是有意义的,让他人和你自己一看这个函数名称就知道这个插件大概干嘛,当然这也是通常的命名规则)。

  f9 P' `: `. H6 j3 j

一个实例

0 }  R4 w. S4 a9 V: C  R

还是拿刚才最开始举的例子来说,就是那个说在手机页面的。这个页面就是手机版的主题列表页面,自定义的位置就是用来显示由插件读取出来的主题的前四张附件图片。对应的这个类的主体代码如下:

% W6 y% ^3 P. P# _4 E$ n1 J5 R' a

  1. //全局嵌入点类  Q7 w- S& T6 O- i
  2. class mobileplugin_muquan_m_seting {. y4 H$ p% W' T8 E- k
  3.   //代码块- f4 p$ t. X; R9 K: h; r) S2 X
  4. }
    & r! c6 }. F, n/ v; N' u; Y/ X9 f
  5. & ~! G  }, x6 o  H/ g
  6. //脚本嵌入点类
    * V: C* s) O( r6 B. H
  7. class mobileplugin_muquan_m_seting_forum extends mobileplugin_muquan_m_seting{
    ; z& m; v3 V( E$ o' H2 i8 W
  8.      //读取前面四张附件图片的方法,用于显示在主题列表中/ \& [: q) `+ s7 G8 G. L7 l( \
  9.      public function forumdisplay_threadsimglist_output(){
    4 |; V  V! m' X) t
  10.        //代码块5 _# V; l3 s; l+ X
  11.      }
    + N% |0 g9 @9 o# I" a5 Z5 E# ~, y% ~
  12.      //其他方法
    - Z0 ^7 L! g% O- {
  13. }
复制代码
其中forumdisplay_threadsimglist_output这个方法就是为了自定义嵌入点而创造的,而其中的forumdisplay就是CURMODULE,threadsimglist就是USERDEFINE。在模版中的嵌入点为


! H" w( ~) z7 O5 ^! x' X/ Q& \6 b9 B

  1. <!--{hook/forumdisplay_threadsimglist $key}-->
复制代码

相信到这里,大家结合官方文档应该知道如何自定义前端点了,以上实例是我开发的的一个插件的部分代码,所以肯定是可以实现的的。如果在实践中遇到问题,欢迎留言或者联系我交流。


# y! Z7 A8 ]* ~( d2 j) j9 o

版权声明
1、转摘或引用本站内容资源须注明原网址,并标明本站网址(兔源码www.tuyuanma.com);
2、对于转摘或引用本站内容资源而引起的民事纠纷、行政处罚或其他损失,本站不承担责任;
3、对于不遵守本声明或其他违法、恶意使用本站内容者,本站保留其追究法律责任的权利。




自动排版 | 高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广告

兔源码网 ( 赣ICP备17001544号 公网安备36112102000036号 )

兔源码 QQ交流群:493651246  GMT+8, 2019-11-15 01:03
←站长统计工具 查看密码:tuyuanma

兔源码DZ模板下载 站长邮箱:tuyuanma@qq.com 站长QQ:3197813386 网站地图

© 2001-2013 本站内容皆来自互联网及用户分享,如需删除请提供软著或商标证书。

     
快速回复 返回顶部 返回列表