立即注册 登录
彼岸网 返回首页

天香公主的个人空间 http://www.bian-wang.com/discuz/?10005 [收藏] [复制] [分享] [RSS] txgz999@yahoo.com

日志

Discuz插件开发:如何开发插件

热度 2已有 6780 次阅读2014-1-11 11:36 PM |个人分类:Discuz|系统分类:社交网理论与实践| 开发, 如何

如何开发Discuz插件(一)

一个插件(plugin)包含了一些代码文件和一个设置文件。Discuz的管理中心里提供了帮助建立插件设置的工具。首先在config\config_global.php里加入下列一行:
$_config['plugindeveloper'] = 1;
后,在管理中心的应用->插件页里的插件列表旁就出现了一个新的选项叫设计新插件。在这里就可以开发自用或它用的新插件。在新插件的设计中,得给插件一个唯一标识符(identifier),我将它设为imyoona_test1。它决定了我们所有与这个插件有关的文件将放在source\plugin里的以这个唯一标识符为名的子目录里。


一个插件可以包括多种不同性能的模块,这里我们造一个包含页面嵌入模块(即把要添加的内容显示在某个现有网页的指定位置上)的插件。我们得指明包含插件程序模块的文件名。

当填完相关信息后,最后点击启用后,就能使用这个插件了。但是我们只是完成了插件的设置,也就是说将插件的一些信息告诉了Discuz系统,还没有开发该插件的功能。注意it是我们随意给的文件名,但其包含的类的名称却另有规定,见下文。 接下来我们要造有关的文件并加入代码。

这个it.class.php文件的名字是在设置时规定好的。这里面的类名也是有规定的:plugin_插件唯一标识符.

class plugin_imyoona_test1 {
	function global_header() {  return "Hello World"; }
}
这个类名符合了要求,那里面的函数又会如何被使用呢?这涉及到一个概念叫嵌入点(又名钩子)。Discuz的网页模板里包含了很多个可以添加内容的嵌入点。当我们把前面config里的那个值改为2以后,我们就能在页面上看到这些嵌入点。(注意改成2后要在管理中心里更新缓存才能在界面上看到所有的嵌入点)

其中一个嵌入点叫global_header,这就是在我们的类里加这样的名字的函数的原因。它的返回值会显示在网页上那个嵌入点的位置里。有两类嵌入点。一类叫全局嵌入点,如global_header,它存在于每个网页上。还有一种是非全局嵌入点,它们只存在于某个网页。如space_blog_title只存在于日志页里。这样的嵌入点得定义在前面的类的一个扩展类里,它的类名必须是基类名加底线再加程序块名,这里是home:

class plugin_imyoona_test1_home extends plugin_imyoona_test1 {
  function space_blog_title() { return "Hi"; }
}
将config里的值改为0后就能看到这个插件给网页带来的变化。


注意对非全局的某个页面相关的模块的类名和函数名也规定了必须遵守的命名规则:
类名: plugin_插件唯一标识符_CURSCRIPT
函数名: CURMODULE_嵌入点名
在这里CURSCRIPT是home, CURMODULE是space


一个插件可以有多个模块。模块的类型有多种。上面我们讨论的是页面嵌入。我们还可以有扩展项目和程序链接。



程序链接让我们将菜单项目添加在各种导航菜单上。



注意家园导航指的是下图左侧的竖立的菜单,而不是横放的菜单。

当我们加入家园导航项目模块时,没有显示顺序的选择。这得到界面->导航设置->家园导航里去设置,注意新加的家园导航项目模块已经自动的被加在名单里了。

在这页上也可以直接添加导航项目,与导航项目模块的不同,我的理解是前者适合自用,后者可以成为第三方插件。



上面我们介绍的是开发并使用一个插件的基本步骤。如果我们要把自己开发的插件给别人用的话该怎么办呢?在插件设计里有个导出xml的功能,它将插件的设置信息都放入了这个xml文件里。将这个xml文件放入上面提到的该插件所在的目录,然后将该目录里的所有内容交给对方,放入对方网站与上面说的同样的地方,然后从他的管理中心里启动后就能用了。


参考资料:
1。Discuz!插件开发手册 http://faq.comsenz.com/library/plug/plugin/plugin_pre.htm
2。Discuz! 技术文库 http://dev.discuz.org/wiki/index.php
3。2013年第一届Discuz!插件制作开发培训视频 http://v.youku.com/v_show/id_XNTMwNTI3NzU2.html

发表评论 评论 (4 个评论)

回复 天香公主 2018-1-1 11:23 PM
drimmeer: 我也是个新手加菜鸟,只是在做一个非常简单的APP。安装Android Studio,照着网上的教程一步一步就可以建立一个了。我是用惯JAVA的,所以编程不是问题,关键是弄 ...
有趣,我猜你得把你的APP放到安卓的商店里,让用户去那里下载。再在网站上加个类似于 http://www.backchina.com/ 左上角的"下载APP"链接
回复 drimmeer 2018-1-1 10:44 PM
天香公主: 谢谢,是刚学插件时记录下要点。时至今日依然觉得插件是Discuz提供的一个很好的机制。

可惜我对手机缺乏了解,无法回答您的问题。如果方便的话,请介绍下如何写 ...
我也是个新手加菜鸟,只是在做一个非常简单的APP。安装Android Studio,照着网上的教程一步一步就可以建立一个了。我是用惯JAVA的,所以编程不是问题,关键是弄懂那些UI怎样在XML里面调整。

现在我已经可以生成一个APK文件,下载到手机里就可以安装运行了。我在想,是不是把APK文件放到论坛网站的public_html目录下就可以下载了呢?还是要写一个PHP,加个密码来控制一下呢?我连PHP都还没学呢。真是惭愧!
回复 天香公主 2017-12-29 05:20 PM
drimmeer: 写得很清楚明白,谢谢!

我现在想在某个导航里加入一个功能,用来下载并启动一个手机的app,不知道可不可行?手机的app是我自己开发的(也还是菜鸟,惭愧),想 ...
谢谢,是刚学插件时记录下要点。时至今日依然觉得插件是Discuz提供的一个很好的机制。

可惜我对手机缺乏了解,无法回答您的问题。如果方便的话,请介绍下如何写app。
回复 drimmeer 2017-12-29 04:31 PM
写得很清楚明白,谢谢!

我现在想在某个导航里加入一个功能,用来下载并启动一个手机的app,不知道可不可行?手机的app是我自己开发的(也还是菜鸟,惭愧),想给论坛里的其他人在手机上试用。

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

小黑屋|Archiver|彼岸网  

Powered by Discuz! X3.1 © 2001-2014 Comsenz Inc.
GMT-4, 2018-4-19 07:40 AM , Processed in 0.057014 second(s), 11 queries. ,ApcOn

返回顶部