以下是引用片段:
第一:先在整站hack目录下新建一个插件目录,这里举例为hack_folder:
第二:在 hack_folder 目录下建立相关的文件: data.sql就是写入到插件数据表的数据文件,同时也是系统自动识别和自动安装的钩子; install.php来编写安装插件后相关的初始设置; fix.php来编写插件的初始设置:(0=可选安装,1=默认安装,2=强制安装)
如果需要在前台导航菜单里自动显示,请用这样的代码来实现: if(!$db->get_one("SELECT * FROM `{$pre}menu` WHERE linkurl='do/hack.php?hack=你的插件目录名'") ) //添加前台头部导航菜单 { $db->query(" INSERT INTO `{$pre}menu` ( `id` , `fid` , `name` , `linkurl` , `color` , `target` , `moduleid` , `type` , `hide` , `list` ) VALUES ( NULL , '0', '插件名称', 'do/hack.php?hack=你的插件目录名'', '', '0', '0', '0', '0', '0' ) "); } menu_cache();
function menu_cache(){ global $db,$pre; $query = $db->query("SELECT * FROM {$pre}menu WHERE moduleid=0 AND AND hide=0 AND fid=0 ORDER BY list DESC"); while($rs = $db->fetch_array($query)){ $array[]="$rs[name]|$rs[linkurl]|$rs[target]|$rs[color]|$rs[id]"; $query2 = $db->query("SELECT * FROM {$pre}menu WHERE moduleid=0 AND AND hide=0 AND fid='$rs[id]' ORDER BY list DESC"); while($rs2 = $db->fetch_array($query2)){ $show.="\r\n\$MenuArray[$rs[id]][]='".addslashes("$rs2[name]|$rs2[linkurl]|$rs2[target]|$rs2[color]|$rs2[id]")."';"; } } $webdbs[guide_word]=implode("\r\n",$array); write_config_cache($webdbs); }
admin.php来编写后台对这插件的管理操作; member.php来编写会员中心对这插件的管理操作; member_menu.php来编写会员中心对这插件管理连接;相关写法可如下: return array( 'name'=>'插件名称', 'url'=>'hack.php?hack=hack_folder&job=list' );index.php来编写前台对这插件的显示; 文件夹template是存放插件需要的模板文件,这里又再分前台,后台和会员中心: template/ 是存放后台管理需要的模板文件; template/index 是存放前台需要的模板文件; template/member 是存放会员中心需要的模板文件; 文件夹images是存放插件需要的图片文件,这里又再分前台,后台和会员中心: images/ 是存放后台管理需要的图片文件; images/index 是存放前台需要的图片文件; images/member 是存放会员中心需要的图片文件;
有关插件模板名的定义,官方推荐用以下定义来编写: list.htm (列表) set.htm (设置) mod.htm (修改) add.htm (添加) menu.htm (菜单)
在调用这些模板文件,可用模板识别函数:hack_admin_tpl(模板名): 示范:hack_admin_tpl('list');
图中我用黄色水印表示这插件的管理地址:index.php?lfj=hack_folder&job=list 开头的 index.php 是表示后台管理插件路径的统一方式; 后面的 lfj=hack_folder 就表示你当前插件目录名,这里已用下划蓝色做了区别; 最后的 job=list 就是当前对插件的管理操作,也就是后台点击插件管理时候的第一界面,其变量取决该插件的构造而定,一般默认都为list,这里已用下划红色做了区别;
而有关job变量的定义,官方推荐用以下定义来编写: $job=="list" (列表) list一般都为插件管理路径的默认值,也有部分插件会是set,情况因插件不同构造而定,list就是表示查看完整的数据列表 $job=="set" (设置) 一般在设置后都会跟上一个$action=="set" 前者是开始提取数据,后者是结束写入数据 $job=="mod" (修改) 一般在修改后都会跟上一个$action=="mod" 前者是开始提取数据,后者是结束写入数据 $job=="add" (添加) 一般在添加后都会跟上一个$action=="add" 前者是开始提取数据,后者是结束写入数据 还有一个变量就是删除,由于删除是属于结束写入数据的那种,所以直接定义为$action=="delete"
最后是插件操作的权限配置,也就是这里用黑色圈出的插件关键字,这也是插件唯一认证的地方,所以不同的插件都会用到不同的关键字,这是为了起到最大的安全效率; 插件操作也就是说在每次操作后都要加上这个关键字变量,也就是$Apower[hack_keywords] 举例:$job=="list"&&$Apower[hack_keywords] $job=="set"&&$Apower[hack_keywords] $action=="delete"&&$Apower[hack_keywords]
第三:把插件相关的应用连接写入到插件管理数据表中(data.sql),如:
# # 转存表中的数据 `php168_hack #
INSERT INTO `php168_hack` ( `keywords` , `name` , `isclose` , `author` , `config` , `htmlcode` , `hackfile` , `hacksqltable` , `adminurl` , `about` , `class1` , `class2` , `list` , `linkname` , `isbiz` ) VALUES ( 'hack_keywords', '测试测试', '0', 'lisheng51', '', '', '', '', 'index.php?lfj=hack_folder&job=list', 'test for a hack', 'other', '其它功能', '0', '', '0' );
第四:以上操作完毕,保存后新插件就会出现在自动安装界面下。 |