PhpWind:插件开发

来自站长百科
跳转至: 导航、​ 搜索

导航: 上一级 | PhpWind | 首页 | Discuz | 动网论坛 | vBulletin | phpBB | MolyX | Discuz!NT

  为统一插件开发规范,促进PHPWind论坛程序的插件开发,以及提高广大PHPWind用户安装插件更加简易,同时尽量避免 升级论坛程序而带来的插件失效,特撰写本开发手册,供插件开发者参考,以及给有兴趣开发插件的朋友们提供帮助。使用本规则,将会避免当前插件体系所能导致的所有常见低级错误:前台文件后台文件填写颠倒,不知道如何执行SQL,不知道如何设置文件777属性,因为没有默认的缓存文件而导致的空白错误。

一、插件专用常量/变量/函数:

  • H_P 插件根目录,用途相当于R_P等常量,为插件专用。R_P."index.php"为论坛根目录下的index.php, H_P."index.php",即指当前插件目录下的index.php文件
  • $basename 插件主文件,程序中任何需要引用到自身的可以用此变量代替。
  • $hkimg 插件图片目录,插件所使用的图片存放路径,相对路径为 /BBS根目录/Hack目录/插件目录/image目录, 此变量的目的在于使得插件目录更灵活,在文件中引用图片路径更简单。
  • PrintHack 得到模板文件路径,区别于默认的PrintEot
  • 以上内容将为插件的目录结构,插件的程序开发提供极大的灵活性,我们倘若修改了名称或者唯一ID之后,唯一需要做的只是修改一下FTP上文件夹的名称跟唯一ID保持一致即可。备注:PHP程序忽略变量以及函数的大小写,如果本文列举的内容大小写跟实际存在出入,可以不予考虑。

二、 插件目录结构,以及文件名约定规则:

举例插件名称为打工插件,唯一ID为work,那么插件的文件夹名称应该跟唯一ID保持一致,其所有文件应该存放在hack/work目录下,以下内容将以此插件为例说明。

  • 插件根目录 hack/work目录 存放插件主要文件,包括在根目录下的文件内容如下:
    • index.php 插件前台主文件,如果不存在此文件,插件则不显示前台界面。
    • admin.php 插件后台主文件,如果不存在此文件,插件则无后台管理功能。
    • sql.txt 插件安装所需要执行的SQL语句,禁止Drop PHPWind自身数据以及删除已有数据等危险操作。如果不需要执行SQL语句变动数据库,可以不存在此文件。
    • readme.txt 插件使用说明,来提供给用户相关说明文档。
    • 倘若无前台显示/后台设置等,可以没有相应的文件,如果有相应功能,则文件命名必须按照指定规则。
  • 图片目录 hack/work/image 此目录存放插件文件中所使用到的图片文件,强烈要求在文件中使用$hkimg 变量来指定此目录,这样指定目录将会让文件有极大的灵活性。
  • 插件包含文件 hack/work/require 倘若插件比较大,可以把一些常用的函数写成文件放入到require文件夹。
  • 插件模板文件夹 hack/work/template 不同于5.0之前的版本,所有模板均放置到template下,前台放置于template /wind后台放置于template/admin,而现有的插件体系规定所有的插件模板均放置在这一个目录下,不再需要分别放到两个 文件夹中。
  • 缓存文件 出于文件777属性考虑,以及缓存文件的统一部署,建议插件开发者将缓存文件存储为data/bbscache 目录下(此目录已经可写,否则无法使用),同时,出于进一步的为插件使用者着想,建议缓存文件使用程序生成, 来避免第一次使用插件时,因为没有缓存文件或者缓存文件不可写而导致的错误--我们必须考虑到,部分用户不熟悉 电脑操作,并不了解如何设置文件777属性,所以建议并不附带默认的缓存文件,而默认的缓存文件,在插件使用者 第一次使用的时候,自动生成到data/bbscache目录下,这样将避免插件安装中频繁出现的777问题。[备注提示:一 般附带缓存的文件,可内置某些默认值,然后插件完成安装之后,使用者应该进行一次设置提交来保存它所需要的设 置,在这个时候设置再生成缓存文件到data/bbscache目录下一个缓存文件,能够有效的避免需要设置777的问题]

三、旧版本插件升级方法

  按照标准的格式开发安装的插件--通过论坛管理后台添加的插件,需要进行一定修改。旧有用户升级需要对原有插件的文件布局做较小的改动。插件作者倘若发布新版本插件,建议采用新的开发方法。而旧版本插件--仅仅指按照标准方法开发的插件,通过论坛后台添加的。需要进行如下三个地方的修改,非常简单:

  • 首先按照插件的唯一ID建立一个文件夹在hack目录下,比如插件唯一ID为work,那么则需要在Hack目录下添加一个 目录为work目录,即为hack/work目录。
  • 然后把插件前台文件改名为index.php,后台文件改名为admin.php(如果存在前台或者后台文件的话)
  • 把改名之后的文件放入到刚刚建立的相应目录中去,比如work目录
  • 完成。其他部分均不需要修改。

四、主要相关函数

  • Refreshto [前台文件相关]

      函数可在执行某操作之后,将页面跳转到指定的网址,附带三个参数,第一个参数为跳转的网址,第二个参数为跳转过程中提示的内容,第三个参数为跳转页面停留的时间。前两个参数必须,第三个参数可选。举例为: refreshto("thread.php?fid=9","您的操作已成功");

  • Showmsg [前台文件相关]

      函数一般用来返回某错误信息,并终止程序的下一步操作,继而供用户返回前一页面。本函数只有一个参数,即犯错的错误提示内容。举例为:Showmsg("您无权访问本页面");

  • Writeover [前台后台通用]

      文件写函数,本函数将指定的字符串信息写入到指定的文件中去,有两个必选参数,第一个是文件名,第二个是字符串内容。举例为:$str="abcdefg";writeover(D_P."data/bbscache/aa.php",$str);

  • Char_cv [前台后台通用]

      对于POST等方法传递过来的变量内容,推荐使用本函数进行处理,本函数将过滤字符串中的危险内容。提高安全性。本函数举例如下:$str=Char_cv($str);

  • PrintHack [前台后台通用]

      函数为插件专用,用来返回一个模板的路径,作为require/include等函数的参数传递。只有两个参数,第一个为模板文件的主文件名,该参数必须,第二个参数为模板文件的扩展名(后坠),该参数可选,默认为htm。举例为: require PrintHack("info"); 包含插件目录下的template目录下的info.htm文件。倘若要包含info.html文件,则应该为 require PrintHack("info","html");

  • Adminmsg [后台文件使用]

      函数主要用于在后台操作时返回某个提示信息,函数有三个参数,第一个参数必选,为返回的信息内容,第二个参数为可选,不带此参数程序将自动返回操作前的页面,带此参数则跳转到该参数指定的页面,第三个参数为跳转页面停留时间。举例如下:adminmsg("系统设置成功");adminmsg("备份成功,现在继续备份下一个文件", "backup.php?step=2");

  • Get_date [前台后台通用]

      本函数用来格式化时间,包含两个参数,前者为一个10位的Unix时间戳,后者为时间的格式,后者为可选参数。建议使用本函数来格式化一个时间,在没有第二个格式参数的时候,将按照默认的年-月-日 小时:分:秒的格式来处理。

  • PCV [前后台通用]

  本函数为5.0版本新增函数,倘若您所要包含的文件中含有变量,要被包含文件使用到--b.php为被包含文件,a.php为包含文件,a.php需要包含b.php来获取某个变量的值--建议使用本函数来过滤b.php文件,来防止跨站攻击等,本函数的使用可以进一步提高安全性。举例说明:include_once Pcv("xxxxx.php");

五、PHP开发建议

  不使用默认的getdate函数获取日期,而使用get_date函数(PW系统自带),这样将能够保持跟系统时间保持一致 (PW后台的时间校正,时区等设置将会生效)。

  推荐使用include函数包含缓存文件,因为require可能缺少文件而产生一个致命错误--空白,而Include函数则不会 有致命错误的产生。

六、其他相关建议

  为了避免PHPWind程序/补丁更新而导致的文件变动,建议插件开发者按照本参考标准开发插件,并尽可能避免修改论坛自身文件,以避免倘若论坛升级之后插件全部失效。另外,插件的数据建议尽可能采用新的数据表,而不要改动原有的数据表,这样也可以有效地避免升级论坛程序而导致的论坛插件数据丢失。对于新建立的插件数据表,建议使用pw_hack_xxx格式来建立,便于区分。

七、插件开发实例

  请参考PHPWind程序中的系统自带插件参考其中的具体写法。相关函数内容请参考admin/admincp.php global.php常用的系统函数均在这两个文件之内。

相关条目[ ]