一、插件专用常量/变量/函数
1) H_P
插件根目录,用途相当于R_P等常量,为插件专用。R_P."index.php"为论坛根目录下的index.php,H_P."index.php",即指当前插件目录下的index.php文件。
2) $basename
插件主文件,程序中任何需要引用到自身的可以用此变量代替。
3) $hkimg
插件图片目录,插件所使用的图片存放路径,相对路径为 /BBS根目录/Hack目录/插件目录/image目录,此变量的目的在于使得插件目录更灵活,在文件中引用图片路径更简单。
4) PrintHack
得到模板文件路径,区别于默认的PrintEot。
以上内容将为插件的目录结构,插件的程序开发提供极大的灵活性,我们倘若修改了名称或者唯一ID之后,唯一需要做的只是修改一下FTP上文件夹的名称跟唯一ID保持一致即可。备注:PHP程序忽略变量以及函数的大小写,如果本文列举的内容大小写跟实际存在出入,可以不予考虑。
二、插件目录结构,以及文件名约定规则:
举例插件名称为打工插件,唯一ID为work,那么插件的文件夹名称应该跟唯一ID保持一致,其所有文件应该存放在 hack/work目录下,以下内容将以此插件为例说明。
1) 插件根目录 hack/work目录
存放插件主要文件,包括在根目录下的文件内容如下:
a) index.php 插件前台主文件,如果不存在此文件,插件则不显示前台界面。
b) admin.php 插件后台主文件,如果不存在此文件,插件则无后台管理功能。
c) sql.txt 插件安装所需要执行的SQL语句,禁止Drop PHPWind自身数据以及删除已有数据等危险操作。如果不需要执行SQL语句变动数据库,可以不存在此文件。
注意:文件中不能存在DROP或DELETE语句,否则安装插件时无法自动升级数据库。
d) readme.txt 插件使用说明,来提供给用户相关说明文档。
e) 倘若无前台显示/后台设置等,可以没有相应的文件,如果有相应功能,则文件命名必须按照指定规则。
2) 图片目录 hack/work/image
此目录存放插件文件中所使用到的图片文件,强烈要求在文件中使用$hkimg变量来指定此目录,这样指定目录将会让文件有极大的灵活性。
3) 插件包含文件 hack/work/require
倘若插件比较大,可以把一些常用的函数写成文件放入到require文件夹。
4) 插件模板文件夹 hack/work/template
现有的插件体系规定所有的插件模板均放置在这一个目录下,不再需要分别放到两个文件夹中。
5) 缓存文件
出于文件777属性考虑,以及缓存文件的统一部署,建议插件开发者将缓存文件存储为data/bbscache 目录下(此目录已经可写,否则论坛是无法使用的), 建议缓存文件在插件使用者第一次使用的时候自动生成到data/bbscache目录下,这样将避免插件安装中频繁出现的777问题。[备注提示:一般附带缓存的文件,可内置某些默认值,然后插件完成安装之后,使用者应该进行一次设置提交来保存它所需要的设置,在这个时候设置再生成缓存文件到data/bbscache目录下一个缓存文件,能够有效的避免需要设置777的问题]
三、主要相关函数
1) Refreshto [前台文件相关]
函数可在执行某操作之后,将页面跳转到指定的网址,附带三个参数,第一个参数为跳转的网址,第二个参数为跳转过程中提示的内容,第三个参数为跳转页面停留的时间。前两个参数必须,第三个参数可选。举例为:
refreshto("thread.php?fid=9","您的操作已成功");
2) Showmsg [前台文件相关]
函数一般用来返回某错误信息,并终止程序的下一步操作,继而供用户返回前一页面。本函数只有一个参数,即犯错的错误提示内容。
举例为:Showmsg("您无权访问本页面");
3) Writeover [前台后台通用]
文件写函数,本函数将指定的字符串信息写入到指定的文件中去,有两个必选参数,第一个是文件名,第二个是字符串内容。举例为:
$str="abcdefg";
writeover(D_P."data/bbscache/aa.php",$str);
4) Char_cv [前台后台通用]
对于POST等方法传递过来的变量内容,推荐使用本函数进行处理,本函数将过滤字符串中的危险内容。提高安全性。本函数举例如下:
$str=Char_cv($str);
5) PrintHack [前台后台通用]
函数为插件专用,用来返回一个模板的路径,作为require/include等函数的参数传递。只有两个参数,第一个为模板文件的主文件名,该参数必须,第二个参数为模板文件的扩展名(后坠),该参数可选,默认为htm。举例为:
require PrintHack("info"); 包含插件目录下的template目录下的info.htm文件。倘若要包含info.html文件,则应该为require PrintHack("info","html");
6) Adminmsg [后台文件使用]
函数主要用于在后台操作时返回某个提示信息,函数有三个参数,第一个参数必选,为返回的信息内容,第二个参数为可选,不带此参数程序将自动返回操作前的页面,带此参数则跳转到该参数指定的页面,第三个参数为跳转页面停留时间。举例如下:
adminmsg("系统设置成功");
adminmsg("备份成功,现在继续备份下一个文件", "backup.php?step=2");
7) Get_date [前台后台通用]
本函数用来格式化时间,包含两个参数,前者为一个10位的Unix时间戳,后者为时间的格式,后者为可选参数。建议使用本函数来格式化一个时间,在没有第二个格式参数的时候,将按照默认的年-月-日 小时:分:秒的格式来处理。
8) PCV [前后台通用]
本函数为5.0版本新增函数,倘若您所要包含的文件中含有变量,要被包含文件使用到--b.php为被包含文件,a.php为包含文件,a.php需要包含b.php来获取某个变量的值--建议使用本函数来过滤b.php文件,来防止跨站攻击等,本函数的使用可以进一步提高安全性。举例说明:
include_once Pcv("xxxxx.php");
五、开发建议
既然是为PW开发的插件,就应该符合PW的插件标准,同时,以下建议也是保证程序准确、稳定运行的必要条件。
1) 不使用默认的getdate函数获取日期,而使用get_date函数(PW系统自带),这样将能够保持跟系统时间保持一致(PW后台的时间校正,时区等设置将会生效)。
2) 推荐使用include函数包含缓存文件,因为require可能缺少文件而产生一个致命错误--空白,而Include函数则不会有致命错误的产生。
3) 建议插件开发者按照本参考标准开发插件,并尽可能避免修改论坛自身文件,以避免倘若论坛升级之后插件失效。对于新建立的插件数据表,建议使用pw_hack_xxx格式来建立,便于区分。
4) 插件模版的书写严格遵从XHTML标准,插件中用到的Javascript尽量保证IE和Firefox下的兼容性。
PHP的日期时间函数date()
1、年-月-日
echo date('Y-m-j');
2007-02-6
echo date('y-n-j');
07-2-6
大写Y表示年四位数字,而小写y表示年的两位数字;
小写m表示月份的数字(带前导),而小写n则表示不带前导的月份数字。
echo date('Y-M-j');
2007-Feb-6
echo date('Y-m-d');
2007-02-06
大写M表示月份的3个缩写字符,而小写m则表示月份的数字(带前导0);
没有大写的J,只有小写j表示月份的日期,无前导o;若需要月份带前导则使用小写的。
echo date('Y-M-j');
2007-Feb-6
echo date('Y-F-jS');
2007-February-6th
大写M表示月份的3个缩写字符,而大写F表示月份的英文全写。(没有小写f)
大写S表示日期的后缀,比如“st”、“nd”、“rd”和“th”,具体看日期数字为何。
小结:
表示年可以用大写的Y和小写y;
表示月可以用大写F、大写M、小写m和小写n(分别表示字符和数字的两种方式);
表示日可以用小写d和小写j,大写S表示日期的后缀。
2、时:分:秒
默认情况下,PHP解释显示的时间为“格林威治标准时间”,与我们本地的时间相差8个小时。
echo date('g:i:s a');
5:56:57 am
echo date('h:i:s A');
05:56:57 AM
小写g表示12小时制,无前导0,而小写h则表示有前导0的12小时制。
当使用12小时制时需要表明上下午,小写a表示小写的“am”和“pm”,大写A表示大写的“AM”和“PM”。
echo date('G:i:s');
14:02:26
大写G表示24小时制的小时数,但是不带前导的;使用大写的H表示带前导的24小时制小时数
小结:
字母g表示小时不带前导,字母h表示小时带前导;
小写g、h表示12小时制,大写G、H表示24小时制。
3、闰年、星期、天
echo date('L');
今年是否闰年:0
echo date('l');
今天是:Tuesday
echo date('D');
今天是:Tue
大写L表示判断今年是否闰年,布尔值,为真返回1,否则为0;
小写l表示当天是星期几的英文全写(Tuesday);
而使用大写D表示星期几的3个字符缩写(Tue)。
echo date('w');
今天星期:2
echo date('W');
本周是全年中的第 06 周
小写w表示星期几,数字形式表示
大写W表示一年中的星期数
echo date('t');
本月是 28 天
echo date('z');
今天是今年的第 36 天
小写t表示当前月份又多少天
小写z表示今天是本年中第几天
4、其他
echo date('T');
UTC
大写T表示服务器的时间区域设置
echo date('I');
0
大写I表示判断当前是否为夏令时,为真返回1,否则为0
echo date('U');
1170769424
大写U表示从1970年1月1日到现在的总秒数,就是Unix时间纪元的UNIX时间戳。
echo date('c');
2007-02-06T14:24:43+00:00
小写c表示ISO8601日期,日期格式为YYYY-MM-DD,用字母T来间隔日期和时间,时间格式为HH:MM:SS,时区使用格林威治标准时间(GMT)的偏差来表示。
echo date('r');
Tue, 06 Feb 2007 14:25:52 +0000
小写r表示RFC822日期。

RSS订阅