dz插件开发
- 格式:doc
- 大小:299.00 KB
- 文档页数:11
相信有不少人热衷于基于修改原有系统文件所做的插件,当然了解程序文件功能是最重要的,下面我把Discuz! X2.0主要的程序文件功能说一下。
我只是整理,不是自己原创编辑的,所有权归原创作者所有哦。
Tips:Q:针对说明的文件是?A:我只基于原版文件对upload目录中基本的程序文件(php,htm,js,除了极少数无关紧要的)进行解释,其余文件(如图片文件),一般不做说明Q:某些目录下空白的index.htm是用来做什么的?A:用来防止列目录的Q:文件名颜色和标识的意义是?A:粗体表示这个文件比较重要,除非你非常了解其功能,否则修改错误会导致全站瘫痪;斜体表示这个文件已被加密,一般情况下修改没有意义;下划线表示这个文件一般99.99%的修改是用不上的,了解即可绿色的是函数库文件,蓝色的是常量调用文件,红色的是系统全局核心文件Q:文件名命名有什么特别规律吗?A:有的,一般inc的是调用文件,func是函数库文件,class是库文件,lng的是语言包文件,了解这些后缀能快速掌握文件功能。
Q:我看了你的帖子,可是我还是看不懂文件内是什么意思啊?A:这个嘛,还是要有一定基础了,一般掌握SQL,PHP和Htm你就可以去改文件做你要的功能了,这个不是我的任务了哦。
一般来说,如果随便指个地方,你能在1分钟内说出大概位置及所在的文件,那么你基本就算合格了。
不过我个人认为最重要的还是多改多读,在实践中提高自己的能力下面开始了,请看你的upload目录里面的文件,表述的格式依次为文件名,功能描述等等先从根目录开始,根目录文件一般都是入口,即执行具体功能的代码一般不在这些文件中,而是在其调用的文件中admin.php 系统站点管理入口文件api.php Discuz!合作应用入口文件(例如漫游、支付宝什么的都走这里)connect.php QQ互联入口文件cp.php 应用入口文件crossdomain.xml 数据交互文件,如果在里面定义其它站点的地址,那么这两个不同站点就可以交互数据favicon.ico图标文件,显示在浏览器的标题栏forum.php 论坛入口文件group.php 群组入口文件home.php 家园入口文件index.php 功能与portal.php基本相同member.php 用户信息入口文件misc.php 网站用户常用操作入口文件,例如像评分、收藏等功能都是走这个文件的plugin.php 插件入口文件portal.php 门户入口文件robots.txt在这个文件中加上具体的地址,可以防止被搜索蜘蛛检索到search.php 搜索功能入口程序userapp.php 用户应用入口程序API目录中的文件主要是和Discuz!进行合作的商家的应用程序,一般不要也无需修改,这里不多说明。
adobe acrobat插件开发的基本流程Adobe Acrobat插件开发的基本流程Adobe Acrobat是一款广泛使用的PDF阅读和编辑工具,在许多应用场景中都扮演着重要的角色。
为了满足用户的特定需求,Adobe提供了插件开发的功能,使用户能够根据自己的业务需求扩展Acrobat的功能。
下面将一步一步回答中括号内的主题,介绍Adobe Acrobat插件开发的基本流程。
1. 确定需求(500字)在进行Adobe Acrobat插件开发之前,首先需要明确开发的目标和需求。
这包括确定要实现的功能、改进哪些操作、提高哪些效率等。
明确需求有助于确定插件的功能范围、界面设计和技术实现。
2. 学习Adobe Acrobat SDK(500字)要进行Adobe Acrobat插件开发,需要详细了解和学习Adobe Acrobat SDK。
Adobe Acrobat SDK是为插件开发者提供的一套文档和工具,可帮助开发者理解Acrobat 的功能和开发流程。
在学习过程中,可以了解插件的构架、接口和API使用,以及常见的开发技术和工具。
3. 设计插件框架(500字)在开发插件之前,需要设计插件的框架。
这包括确定插件的基本功能、界面设计和交互方式。
根据需求和用户习惯,设计一个简洁易用的插件界面,使用户能够轻松理解和使用插件提供的功能。
同时,还需要考虑插件的可扩展性,以便在今后的版本中进行功能的增添和改进。
4. 编写代码(1000字)一旦插件的框架设计完成,就可以开始编写代码。
Adobe Acrobat插件开发支持多种编程语言,包括JavaScript、C++、C等。
根据自己的编程能力和项目要求,选择合适的编程语言进行开发。
在编写代码的过程中,需要调用Acrobat的API接口,实现插件的各种功能。
根据API文档和SDK提供的示例代码,开发者可以完成插件的具体实现。
在编码过程中,还需要进行测试和调试,确保插件的稳定性和功能完善性。
Discuz! 的插件机制准备工作| 插件接口| 参数读取| 页面嵌入| 插件嵌入点列表| 特殊主题|第三方拓展类| 其它模块| 安装卸载升级| 模板和语言包| 注意事项| 插件开发实例准备工作插件实现流程开始编写社区插件,您应当首先对插件实现的流程有一个大致的了解,以下是我们推荐的插件编写流程:∙熟练使用 Discuz! 社区系统后,对希望完善或补充的个性化功能进行评估,进而提出插件的功能需求。
∙对插件做一个概括性的设计,例如:需要使用什么菜单、什么参数,配置哪些选项、数据结构如何设计、前后台实现哪些功能等等。
∙阅读本文档并在系统设置中实际体验 Discuz! 插件接口所实现的功用,例如:您的插件应当如何设计才能良好的挂接到社区系统中来。
插件接口能够实现哪些功能、不能实现哪些功能,插件为此而需要做的优化、改造和取舍。
∙编写相应程序代码和模板语句,实现所需的功能并进行代码测试、兼容性测试和代码改进。
∙如果需要公开您的插件,可以用插件导出的方式,将插件配置信息导出到一个 XML 文件中,连同相应的程序和模板文件一同打包。
同时,编写一个适合新手的插件的说明书也是必不可少的,其中包括:插件适用的 Discuz!版本、功能概述、兼容性声明、安装方法、使用方法、卸载方法等等。
∙将插件提供给他人,或自己使用,根据使用者反馈,对插件进行完善。
插件实现流程至此结束。
文件命名规范Discuz! 按照如下的规范对程序和模板进行命名,请在设计插件时尽量遵循此命名规范:∙可以直接通过浏览器访问的普通程序文件,以 .php 后缀命名。
∙被普通程序文件引用的程序文件,以 .inc.php 后缀命名。
∙被普通程序文件,或引用程序文件引用的函数库或类库,以 .func.php(函数库) 或 .class.php(类库) 后缀命名。
∙模板文件,以 .htm 后缀命名,插件模板文件存在于 source/plugin/identifier/template/ 目录中,手机版插件模板存在于 source/plugin/identifier/template/mobile/目录中∙模板语言包文件,以 .lang.php 后缀命名,插件语言包文件开发时存放于 data/plugindata/ 目录中,文件名为ng.php。
discuz使用与插件开发使用开源产品:能后台配置的尽量后台配置其实写插件其次修改JS/css再其次修改模板再其次修改PHP文件最后修改数据库discuz安装与后台功能介绍1:论坛开启与关闭, 全局-->站点信息当论坛临时维护时,可以时间关闭站点,2: 论坛开放与关闭注册:3: 修改注册链接,防止机器人注册(几乎无用)默认的注册链接如右图可以不修改php文件,并自定义注册链接.全局-->注册访问控制-->注册地址注册链接变为4: 验证用户的email全局--->用户注册与访问--->新用户注册验证选择email验证.5:如果4中,选择email验证,还需要在”站长-->邮件设置”中设置发邮件的方式1:用sendmail发送(在Linux下,且正常支持sendmail)2:用smtp协议发送,要求有1个支持smtp的邮箱,如126,163等老牌邮箱.配置用户名及密码,及可用来发邮件6: 禁用词过滤内容--->词语过滤7: 用户发表的链接控制要从2个方面来控制1: 用户--->用户级--->基本设置-->站外URL解析2: 但是用户发的任何链接,都无法解析如果我们用合法站点,比如百度网盘,或华为网盘等,允许发送. 全局-->注册与访问控制-->访问控制discuz的DIY功能diy是通过图形化的配置,让不懂程序的使用者,也能动态调用系统的相关数据. 如:最新帖, 热门帖, 最新文章等等.DIY功能里,有框架和模块框架的作用是把页面或div,拆成指定块, 如长度1:3的2个div,把页面拆成两部分. 而且框架是可以嵌套的,有可能做出比较复杂的框架效果来.模块:模块的作用是取出指定的信息---如论坛帖子模块,可以取出最新帖,热门帖等等.静态模块,可以允许用户填写自定义的HTML内容.一句话:框架是为了布局用的.模块是为了取数据用的并设定帖子模块的相关参数.保存后: 论坛首页即出现如下调用效果.tab切换标签我们选择tab框架,插入已有框架中.再把普通模块拖入标签中,起一个标签就可以了.默认的标签切换效果需要鼠标点击, 如果要变成鼠标划过,切换的效果, 可以编辑tab标签,选择”切换类型”discuz插件开发插件开发的意义:插件是可插拔的, 即可以在不改动源码的情况下, 增改论坛的功能.以后升级论坛的过程中,升级过程不受影响.比如,论坛有member.php,为了达到防机器人注册的功能1: 直接修改member.php,达到目的.2: 添加插件来完成.然后----论坛程序升级, member.php被官方最新的member.php代替.那么:对于1: 之前的改动,要再做一遍.对于2: 插件接口的API往往不会变,所以只需要把插件再注册一遍就可以用.discuz插件的运行原理:大多数系统的插件运行原理都类似, 即在程序指定处,留下钩子. 开发人员按照要求(比如按与钩子有关联的函数名) 来写程序. 那么钩子会运行用户的预留函数唱歌带包烟假设PHP是一个服务员,从连接数据库--->输出模板这一路上,有几个关键点,如”唱歌”,”买烟”,服务员经过这几点,会看这个点有没有数据或函数,有则调用.继而影响最终的输出结果.discuz插件的位置及文件格式位置: 在系统的source/plugin/目录下,一个插件一个目录.如下图:是一个简单而典型的插件:包括:描述插件的XML文件插件.class.phpXML文件是用来描述插件的名称,作者,位置,类名等等.PHP文件,是插件的具体运行页面.第一个插件开发直接把一个简单的插件(如上面的soso_smiles) ,复制一份,改名, 如下打开XML文件,其中name是插件名称identifier 是插件的标识,不能重复.directory 是指插件目录然后在weibo.class.php中,写入如下类此时这个类还是空的,没有具体作用,但是,一个插件的壳已经完成了. 管理员进入后台,查看应用,插件,看到如下信息则说明,我们的微博插件的壳已经正常了.接下来,再开发具体的插件功能确认插件在哪个.php文件上的哪个位置发挥作用根据forum.php的’forum’,再写一个子类根据位置,找到hook名称根据Hook名称,我们再写方法, 注意,方法名与hook点的关系.方法的返回值,就会出现在hook点上.嵌入点列表:/library/plug/plugin/plugin_hook.htm允许用户输出参数的插件我们需要在XML里,加上var 定义title: 输入框前的提示variable:变量名type: text ,普通文本框如何在插件的类里,如weibo.class.php中访问该插件变量?答: discuz的网站信息,配置信息,栏目信息,用户信息,缓存信息,插件信息.... 都被初始化一个普通全局变量$_G中.因此,我们可以通过$_G来获取插件的相关变量值.具体语法是$_G[‘cache’][‘plugin’][插件名][变量名]以weibo插件来说, $_G[‘cache’][‘plugin’][‘weibo’][‘weiboid’];discuz开发者模式, 自动创建XML打开config_global.php修改$_config['plugindeveloper'] = 1;如果没有,直接加上这一句作业:自行开发一个防机器人注册插件.思路:机器人插件一般是用HTTP协议提交,不通过浏览器.我们写一个插件,让用户点击提交瞬间,触发JS,动态创建一个hidden表单域及其值. 后台检测此值.如果是机器人,没通过浏览器,没有这个值.。
Discuz! 安装插件的方法(以x3版本为例)1、登录至您的论坛后台管理中心,在“应用”菜单下点击选择“获取更多插件”。
2、在搜索框中,输入您需要安装的插件名称,如“用户登录日志”。
3、根据搜索结果,您可以选择进行安装4、打开具体插件,点击右上方“安装插件”,即可自动开始安装。
5、安装完成之后,返回“应用中心”,选择相应插件的“启用”选项,即可正常开启日志功能,在其日志查询中可以查看到所有来访用户的相关信息。
注意:1、在安装之前,请使用管理中心的“文件校验”功能,检查网站程序文件是否完整。
2、检查您的网站程序权限是否正确,如果出现无法写入的情况,您可先增添写入权限,等待插件安装完成之后重新改回即可。
3、上述步骤只是按照通用流程进行描述的,如果本文介绍的安装流程与插件说明书中的描述不符,请以插件提供者的描述为准。
附:使用Discuz插件的风险安装和使用Discuz插件无疑为使用者提供了令人兴奋的扩展特性,但您在动手之前必须要考虑清楚使用插件的风险,依据对风险的评估来决定是否安装Discuz插件,毕竟对于网站论坛来说,运行稳定和访问快速是压倒一切的根本目标。
插件由第三方开发的性质,决定了插件的质量可能参差不齐,可能导致的问题有:1. 由于对系统权限控制的不精通和安全编码经验的不充足导致的论坛安全性下降,严重时插件可能会被作为攻击论坛系统、非法获取管理权限的入口;2. 并不是所有的插件作者和开发团队都深谙高效的编码技术和优化的[[数据结构]]设计,例如一条编写不当的[[SQL]]语句,可能会耗费比整个论坛系统更多的[[服务器]]资源。
因此有些插件可能导致论坛变得不稳定、访问速度变慢、资源消耗提高;3. 由于Discuz! 开发组长期坚持对论坛系统的功能及结构进行改进,以实现更优化的系统效率和更强大的系统功能。
虽然采用插件接口推荐的设计方式,可以尽可能的避免兼容性问题,但由于插件实现方式的多样性,您使用的插件仍然有可能无法兼容于未来的Discuz! 版本。
Discuz! X系列,缓存扩展机制说明Discuz! X系列中加入了全新的缓存机制,我们在开发插件或者是增加新的功能的时候可以很方便的为系统增加一个全新的缓存,并在任何页面中使用。
下面以一个名为 example 的缓存为例,详细说一下这个机制。
新建一个文件:1.<?php2.if(!defined('IN_DISCUZ')) {3. exit('Access Denied');4.}5.6.function build_cache_example() {7. $data = array();8. $data[] = 'Hello World';9. $data[] = 'Hello Discuz!';10. save_syscache('example', $data);11.}12.13.?>复制代码这就是一个标准的生成缓存的文件。
其中有几点重要的为:1.需要生成名字为 example 的缓存,那么这个文件的名字需要命名为:cache_example.php2.文件中的 build_cache_xxxx 类似的这个函数名应为build_cache_example3.save_syscache('xxxx', $data); 应该为 save_syscache('example',$data);4.为了安全性,文件头部必须增加1.if(!defined('IN_DISCUZ')) {2. exit('Access Denied');3.}复制代码其中 build_cache_example 函数就是主要的对需要缓存的数据做处理的函数,所有的组织数据,都可以放到这个函数里面执行,或者放到多个小函数,然后统一在这个函数中执行。
而且结尾必须要以 save_syscache('example', $data);结尾,才能写入缓存数据。
DiscuzX3.2教程插件制作的基本思路是:(初学者适用)1.形成插件思路2.制作插件界面3.构架程序模块4.搭建存储数据5.填充功能语句6.检查应用错误7.完善插件功能前言:为方便互联网数万Discuz!爱好者,更加深入了解Discuz!软件,本人在熟悉Discuz!过程中,顺便将个人经验写给大家。
本贴内容由本人定期更新。
本贴只介绍Discuz!中部分技术点,本贴紧属个人观点,不足之处,请各位多多指教,在下先此谢过!。
“Discuz!”在下文中简称“DZ”。
要弄DZ二次开发,必须至少具备如下技能:1)能够理很好理解MVC构架的原理(虽然DZ不是MVC架构的)2)扎实的PHP基础,熟悉结构化程序,OOP程序的写法及应用3)熟悉MYSQL就用,掌握SQL语言,懂SQL优化者更佳4)熟悉使用Discuz!的各项功能一)Discuz!的文件系统目录注:想搞DZ开发,就得弄懂DZ中每个文件的功能。
a) Admin:后台管理功能模块b) Api:DZ系统与其它系统之间接口程序c) Archiver:DZ中,用以搜索引擎优化的无图版d) Attachments:DZ中,用户上传附件的存放目录e) Customavatars:DZ中,用户自定义头像的目录f) Forumdata:DZ缓存数据的存放目录g) Images:DZ模板中的图片存放目录h) Include:DZ常用函数库,基本功能模块目录i) Ipdata:DZ统计IP来路用的数据j) Plugins:DZ插件信息的存放目录k) Templates:DZ模板文件的存放目录l) Wap:DZ无线,Wap程序处理目录二)必须记熟Discuz!数据库设计的每个表的功能,每个表中每个字段的功能。
关于DZ数据库设计文档,请参阅DZ相关的项目文档(请从本贴附件中下载)三)Discuz!的流程控制a) 后台流程控:DZ后台所有的功能,均需要注册到admincp.php文件,每个功能都至少有一个或一个以上的Action(动作),在admincp.php中,可以定义Action的执行权限,分别为:“admin==1”管理员,或“admin==2 || admin==3”超级版主和版主,每个Action对应一个脚本文件,脚本文件的命名为action.inc.php(*.inc.php),并存放在admin目录下,如执行:admincp.php?action=dodo,相当于执行admin目录下的dodo.inc.php文件b) 前台流程控制:前台的流程控制比较简单:流程是自由的,如:首页:index.php会员注册:register.php;会员登录:logging.php发贴程序:post.php会员信息:member.php论坛内容:forumdisplay.php查看贴子:member.php…大部分功能,此处不一一列出…c) DZ根目下的config.inc.php属于整个DZ系统的配置文件四)Discuz!的数据处理过程a) DZ对mysql的数据库操作处理全部封装在dbstuff(db_mysql.class.php)类中b) 所在的外部数据均通过“daddslashes()”初步过滤,然后再过滤,再根据需要处理五)Discuz!的显示控制(网站多样式风格输出)a) 显示层就是大家通常所看到的网站风格了。
Phpwind和Discuz谁能更胜一筹?phpwind和discuz这两个是目前最为广泛的论坛系统。
他们之间互相竞争,不断的进步,究竟谁比较优越?谁的前景更好?今天就对两个熟悉的论坛系统在一些功能上进行比较。
我们先来认识下phpwind和discuz两个论坛系统,请看下表基本参数对比:对比参数Phpwind Discuz最新版本号V7。
5 7。
0官方地址 速度与承载速度快,承载力可以速度可以,承载力强论坛插件方面PW总量少,插件单一,实用性不强,优秀大型插件不多.例如银行插件,只有有简单存取汇款,以及活定期就没其他了。
DZ总量多,插件多元素,优秀大型插件不少.例如银行插件,除了pw所拥有的外,会员还可自设银行,增加的娱乐互动性。
使用人数PW较多,较为集中于个人,例如近期火热的农场游戏论坛,开设的论坛较多为PW DZ非常多,一般技术型的论坛都偏向于DZAlexa排名22,389 4,604功能上特点Phpwind独创的技术架构和程序设计,获得国家专利认证,从根基着手塑造快速、稳健、可扩展的论坛程序。
7年砺炼,在用户需求基础上进行不断创新与完善,无论企业还是娱乐,全面满足论坛建设。
数据库分卷技术等就比较实用而且Discuz没有,普通人也没可能开发这样的功能插件。
Discuz从创立之初即以提高产品效率为突破口,随着编译模板,语法生成内核,数据缓存和自动更新机制等独创或独有技术的应用,和坚固的数据结构及最少化数据库查询设计,使得Discuz可以在极为繁忙的服务器环境下快速稳定运行,切实节约企业成本,提升企业形象。
discuz每一次升级都是有非常巨大的变革而,phpwind却太全面,很多插件都捆绑了,比如个人自定义风格的插件等,但可以说用到的人不会超过1%。
但这样却会减弱了Phpwind 一直以来比discuz优秀所在--速度总评:两者各有千秋,discuz承载力强,插件多而优秀等,phpwind却速度快,数据分卷技术好等,发展方向各有不同,两者将会长期共存,并且长期竞争。
网站的基本数据在DX的这个框架中,我们会经常用到一些使用的数据,这些数据包括:系统常量、全局变量、系统调用,首先我们从系统常量说起系统常量DX里面对一些常量做了自己的定义,接下来的表格列举了,更多的变量可以使用附录里的全局变量DX的全局变量事实上全部压缩到了一个变量:$_G里面,接下来的表格列举了常用的$_G数据内部的变量,更多的变量可以使用附录里的代码获得。
系统调用系统调用里面,恐怕最重要的调用要数DB这个静态对象了。
这是一个数据库的静态对象,对其的使用也是经常用到的,其方法包括:另外,系统的一些其它的系统调用,包括:获取用户信息、插入帖子等内容,都可以在:souce/function/ 文件夹下找到对应的文件来查看。
1. 查看全部常量:1.<?php2.require_once './source/class/class_core.php';3.require_once './source/function/function_home.php';4.$discuz = & discuz_core::instance();5.$discuz->init();6.print_r(get_defined_constants());7.?>复制代码2. 查看$_G变量中内容1.<?php2.require_once './source/class/class_core.php';3.require_once './source/function/function_home.php';4.$discuz = & discuz_core::instance();5.$discuz->init();6.print_r($_G);7.?>复制代码[以上内容整理自monkee]接下来.我们就已 "扩展中心"插件为例制作一个简易,却很实用的论坛扩展插件.本帖隐藏的内容首先.打开论坛后台: 插件 -> 插件 -> 设计新插件注:唯一标识符提交后.将不能在此修改.提交后,会切换到插件的设置页面.如果不涉及到其他编码.可以不选用"插件语言包"接下来.我们就可以开始添加插件的模块文件了.打开程序目录:/source/plugin/ 建立新文件包 dst_Expand (这里的文件包名要与唯一标识符一致)第一步.我们先做一个admincp.inc.php在/source/plugin/唯一标识符/下新建一个文件 admincp.inc.php因为扩展中心不需要后台设置所以该文件不需要编写内容只需复制一下内容即可1.<?php2.3.4.if(!defined('IN_DISCUZ')) {5. exit('Access Denied');6.}7.8.9.?>复制代码文件写好后.返回后台的模块设置.按下图样式填写:写好只有点击提交.返回到插件列表页.点击开启.后台部分便完成了.之后开始编写其他模块文件返回设计 -> 模块按下图添加新模块添加完毕后界面 -> 导航栏 -> 选择"扩展" 可用在/source/plugin/唯一标识符/下新建一个文件 Expand.inc.php在里面编写1.<?php2./**3.* [New.DST] (C)2010-2011 New PHP Support Forum4.* This is NOT a freeware, use is subject to license terms5.*6.* $Id: Expand.inc.php 2010-07-31Z [DST]ZannYount $7.*/8.9.if(!defined('IN_DISCUZ')) {10. exit('Access Denied');11.}12. include template("dst_Expand:Expand");13.14.?>复制代码其中1. include template("dst_Expand:Expand");复制代码template:表示dst_Expand插件文件包目录下的模板文件dst_Expand:表示该插件的唯一标识符Expand:表示template下的模板文件名接下来在dst_Expand插件文件包目录下新建新文件包 template在 template 文件包下新建文件 Expand.htm在 Expand.htm 文件里编写1.{template common/header}2.<div id="wp" class="wp">3. <div id="pt" class="wp"><a href="index.php"class="nvhm">$_G[setting][bbname]</a> › 扩展中心</div>4.这里是内页所显示的内容5.{template common/footer}复制代码其中1.{template common/header}复制代码表示调用页头文件1.<div id="pt" class="wp"><a href="index.php"class="nvhm">$_G[setting][bbname]</a> › 扩展中心</div>复制代码表示:1.{template common/footer}复制代码表示调用页底文件这样, 一个内页就算完成了.接下来,我们就根据上面的教程制作一个扩展中心的内页template 文件包下的 Expand.htm可以做任何的形式,只要你熟悉CSS和DIV下面,贴出扩展中心的代码把上面教程中 "这里是内页所显示的内容" 替换成1. <link rel="stylesheet" type="text/css"href="source/plugin/dst_Expand/template/Expand.css">2.<div id="ct" class="wp cl">3. <div class="mn mw">4. <div class="bm bml">5. <div class="bm_c cl">6. <div id="forum_rules">7. <div class="pbm xg2">8.<ul class="tb cl">9.<li id="Id_About_Us"> <ahref="plugin.php?id=dst_Expand:Expand&to=Id_About_Us">关于我们</a></li>10.<li id="Id_Team_News"> <ahref="plugin.php?id=dst_Expand:Expand&to=Id_Team_News">团队动态</a></li>11.<li id="Id_License_Agreement"> <ahref="plugin.php?id=dst_Expand:Expand&to=Id_License_Agreement">授权协议</a></li>12.<li id="Id_Team_Rules"> <ahref="plugin.php?id=dst_Expand:Expand&to=Id_Team_Rules">团队规章</a></li>13.<li id="Id_Business_Support"> <ahref="plugin.php?id=dst_Expand:Expand&to=Id_Business_Support">商业支持</a></li>14.<li id="Id_Partners"> <ahref="plugin.php?id=dst_Expand:Expand&to=Id_Partners">合作伙伴</a></li>15.<li id="Id_Team_Concept"> <ahref="plugin.php?id=dst_Expand:Expand&to=Id_Team_Concept">团队理念</a></li>16.<li id="Id_Contact_us"> <ahref="plugin.php?id=dst_Expand:Expand&to=Id_Contact_us">联系我们</a></li>17.<li id="Id_Site_Map"> <ahref="plugin.php?id=dst_Expand:Expand&to=Id_Site_Map">网站地图</a></li>18.<li id="Id_Advertising"> <ahref="plugin.php?id=dst_Expand:Expand&to=Id_Advertising">广告服务</a></li>19.<li id="Id_Site_Help"> <ahref="plugin.php?id=dst_Expand:Expand&to=Id_Site_Help">网站帮助</a></li>20.</ul> <br />21.22.23.<!--{if $_G['gp_to'] == 'Id_Team_News'}-->{templatedst_Expand:Id_Team_News}24.<!--{elseif $_G['gp_to'] == 'Id_License_Agreement'}-->{templatedst_Expand:Id_License_Agreement}25.<!--{elseif $_G['gp_to'] == 'Id_Team_Rules'}-->{templatedst_Expand:Id_Team_Rules}26.<!--{elseif $_G['gp_to'] == 'Id_Business_Support'}-->{templatedst_Expand:Id_Business_Support}27.<!--{elseif $_G['gp_to'] == 'Id_Partners'}-->{templatedst_Expand:Id_Partners}28.<!--{elseif $_G['gp_to'] == 'Id_Team_Concept'}-->{templatedst_Expand:Id_Team_Concept}29.<!--{elseif $_G['gp_to'] == 'Id_Contact_us'}-->{templatedst_Expand:Id_Contact_us}30.<!--{elseif $_G['gp_to'] == 'Id_Site_Map'}-->{templatedst_Expand:Id_Site_Map}31.<!--{elseif $_G['gp_to'] == 'Id_Advertising'}-->{templatedst_Expand:Id_Advertising}32.<!--{elseif $_G['gp_to'] == 'Id_Site_Help'}-->{templatedst_Expand:Id_Site_Help}33.<!--{else}-->{template dst_Expand:Id_About_Us}34.<!--{/if}-->35. </div>36. </div>37. </div>38. </div>39. </div>40.</div>41. </div>42.43.44.<script type="text/javascript">45.<!--46. var ishave=true;47. var isset=false;48. querystring=document.location.search;49. lo=querystring.indexOf('to=');50. if (lo>0) {51. var result=querystring.substr(lo+3);52. if (result=="") ishave=false;53. }54. else { ishave=false; }55. divob=document.getElementById('forum_rules');56. lis=divob.getElementsByTagName('li');57. if (ishave) {58. for (var i=0; i<lis.length; i++) {59. if (lis[i].id==result) {60. lis[i].className="a";61. isset=true;62. break;63. }64. }65. }66. else {67. lis[0].className="a";68. }69. if (!isset) lis[0].className="a";70.//-->71.</script>复制代码然后再写个CSS文件 Expand.css1.#ct {2.background:none !important;3.}复制代码这回去看看发生了什么吧下面我来详细的解剖一下上面的导航栏的写法在上面的导航栏效果中:1.<li id="Id_About_Us"> <ahref="plugin.php?id=dst_Expand:Expand&to=Id_About_Us">关于我们</a></li>复制代码href="" 中的路径表示的是各个分类的路径关于我们则表示的导航栏的文字而下面1.<!--{if $_G['gp_to'] == 'Id_Team_News'}-->{templatedst_Expand:Id_Team_News}复制代码等等中的{template dst_Expand:Id_Team_News}表示的是 dst_Expand这个插件文件包下的template文件包下的Id_Team_News.htm 文件因为该插件下面要输写的内容过多.为了方便整理和修改.我们在这里采用了外调的方法. 也就是说每一个导航栏单独写成一个.htm的文件然后再由Expand.htm 这个文件总的来调用.这样每一个分类下的内容就简洁多了但是这里一定要注意几点:一.文件的目录{template dst_Expand:Id_Team_News} 里的Id_Team_News.htm 文件要和Expand.htm为同一个目录.二.<li>中的ID 以及变量$_G['gp_to'] == '里的ID 一定要保持和文件名也就是&to= 后面的一致否则就会产生模板文件找不到的错误最后.我们就可以在分类下,填写自己想要的内容了.按照上面已经写好的Expand.htm 我们新建一个文件 Id_About_Us.htm 这个是"关于我们"的文件新建好以后我们在文件中任意输入任何文字内容以上,我们就可以根据上述的教程,制作出一个简单的"扩展中心"插件了当然,如果你可以熟练的运用CSS+Div 的话.还可以做出更精美的效果. 您可以参考/plugin.php?id=dst_Expand:Expand根据自己的需要运用CSS+Div。