所有插件的入口文件都为根目录下的“plugin.php”,由连接参数指向具体的插件,“plugin.php?mod=shijiu&act=index”,mod指的是插件标识码,act指向插件的act文件
插件页面会自动获取插件的后台的基本设置,赋值给“$plugin_config”,开发者打印查看。
在plugin.php文件中定义了“PLUGIN_TPLPATH”和“PLUGIN_TPLURL”两个常量,分别是模板的绝对路径和相对于根目录的路径,开发者可直接使用
在根目录/plugin下新建一个文件夹,名字为“shijiu”
shjiu文件集包含以下文件:admin(存放后台设置文件),mod(存放前台显示控制文件),template(存放前台模板文件),comm.php(全局调用文件),rewrite.php(伪静态文件),set.php(应用信息文件),update.php(安装升级文件)
set.php包含改插件的后台目录,数据库结构,前台行为,安装卸载sql,是否需要伪静态,是否需要全局引入文件等基本信息:
注意:'admin_auto' => array (……部分,“index”键,没有特别需求,请设置为1,提交后系统自动生成插件配置文件
return array (
'admin_nav' => array ( //后台目录
'index' => array ('title' => '基本设置'), //键名“index”表示后台插件的do行为,如果应用需要后台设置,必须有index页面
'list' => array ('title' => '商品列表'),
'addedi' => array ('title' => '添加商品'),
'caiji' => array ('title' => '商品采集','arr'=>array('no_header'=>1)), //arr指的是在连接后加任意参数
'url_1' => array ('title' => '查看教程','url' => 'http://bbs.duoduo123.com'), //如果数组中含有“url”,表示这是一个外部链接
'url_2' => array('title'=>'会员列表','mod'=>'user','act'=>'list','arr'=>array('page'=>1)), //如果函数mod和act,表示指向网站后台的的一个模块,arr根据实际情况选择
),
'admin_auto' => array ('index' => 1,'list' => 1,'addedi' => 1,'del' => 1), //后台模块数据是否用框架自动处理
'table' => array ( //数据库结构,键名“shijiu”表示应用安装时自动创建“duoduo_plugin_shijiu”的表,表结构不需要自己写明,只要在本地开发中创建表“duoduo_plugin_shijiu”,把debug模式改为1,可点击后自动生成
'shijiu' => array (
'id' => 'int(11) NOT NULL auto_increment',
'val' => 'text NOT NULL',
'type' => 'tinyint(1) NOT NULL default "0"',
'duoduo_table_index' => 'PRIMARY KEY (`id`),KEY `type` (`type`)',
),
//重复上面的数组可创建多个表
),
'act_arr' => array ( //应用前台模块,没有特别需求tag可重复应用标识码
0 => array (
'act' => 'index',
'title' => '19.9包邮',
'tag' => 'shijiu',
'nav' => 1, //添加nav字段,会自动添加前台导航
),
1 => array (
'act' => 'view',
'title' => '',
'tag' => 'shijiu',
),
),
'search' => array ( //如果不需要前台页面自动添加搜索,“search”为空
'act' => 'index',
'search_name' => '十九块九',
'search_tip' => '搜索十九块九商品',
'search_width' => '70',
),
'install_sql' => 'select * from {%BIAOTOU%}user where id=5;select * from {%BIAOTOU%}user where id=5;', //安装sql语句,假设应用需要对现有的表增加字段,便可在这里执行sql,例子中的select只是随便写的
'uninstall_sql' => 'select * from {%BIAOTOU%}user where id=5;select * from {%BIAOTOU%}user where id=5;', //卸载sql语句,与安装sql对应,添加过什么字段必须在这里有对应的删除
'need_include' => 1, //是否需要全局调用文件,文件目录在plugin/shijiu/comm.php
'debug' => 0, //调试模式,设置为1应用后台出现“生成配置文件(即set.php)”的按钮,生成后debug会自动置0,调试模式下,系统会自动判断后台代码的a和from表示是否有do和plugin_id,只是友好的提示,开发者自己确定没错可不用理会,本地开发时需要设置为1.
'banben'=>'20130911', //应用所试用的多多版本
'version'=>'0.1', //应用自身的版本号
);
?>
下面对set.php内的做具体说明:
admin_nav:表示后台目录,与admin文件夹下的文件对应,在admin_nav下定义数组都会在插件后台显示快捷导航,如果定义了“url”键名,便是一个外部连接。
admin_auto:表示后台模块是否使用多多默认框架。多多插件后台默认4个模块“index(插件基本设置,每个插件必须默认添加此文件),list(数据库数据列表),addedt(数据库数据添加修改),del(数据库数据删除)”,具体代码参照admin/plugin/admin.act.php,如果您不需要框架默认的数据处理,要自行写逻辑,请把admin_auto对应的模块数值设置为0
table:如果您的插件不需要新建表,请将table的数组内容留空。table可以添加多个表,第一个表必须以应用标识码为名,如范例中的“shijiu”,安装应用时系统会自定创建表“表头_plugin_shijiu”,如需多个表可为table增加数组,表名必须是“shijiu_名字”。文件中的表结构无需自己书写,开发者只需要本地建好数据库,后面会讲到如何自动生成。
act_arr:前台行为,安装应用时根据是否有“nav”等于1会自动添加页面管理和导航。
search:模板导航接口,会在前台搜索框自动增加一个搜索项,关键词参数是q,不需要请留空。
install_sql:应用安装sql,用分号分开,“{%BIAOTOU%}”表示表头,无需安装sql请留空。
uninstall_sql:应用卸载sql,用分号分开,“{%BIAOTOU%}”表示表头,无需卸载sql请留空,卸载sql必须与安装sql对应。
need_include:是否需要给全局添加引入文件,对应插件内的comm.php文件。需要是1,不需要是0
rewrite:是否有伪静态文件。需要是1,不需要是0
debug:调试模式,打开这个模式后,在插件后台管理首页,会多一个生成配置文件的按钮,程序会根据你填写的数据库名,自动从你的库中检索出结构,并更新set.php。本地开发时设置为1。
下面对admin文件夹做具体说明:
admin下的文件因为结构相对简单,所以不区分mod和template,控制代码和模板代码写在同一个文件中。
admin下的文件内容中的a,form等标签,连接中必须带有do和plugin_id参数,do表示代码行为,用于指向admin下的文件,plugin_id是该应用的id号。当打开debug模式,框架会自动检查a和form标签是否带有do和plugin_id参数,并提示开发者。(框架只是提醒,如果开发者处理的a和form标签确实不需要do或者plugin_id参数,那么无需理会警告)
index.php:应用基本设置,提交后会自动生成一个数据文件记录在data/json/plugin/应用标识码.php,调用函数“dd_get_cache('plugin/应用标识码')”,
list.php:将“表头_plugin_shijiu”的数据罗列。按照一定的规则筛选数据是列表页的常用需求之一(比如商品表按照分类、标题查询等):
在list.php页面的上部查询form中,框架对两个input有特殊处理,截图事例:
name为“sql_where”的input表示查询字段的规则,每个字段用大括号包含,内部规则用英文分号隔开,共分4节,下面对其中一个进行说明,“title:char:like:full”,第一节表示字段名,第二节表示字段类型(字符类型是char,数字类型是int),第三节表示sql语句中的where比较符,是liek就是like,是等于就是等于,第四节有两个状态,一个是“full”,表示当字段为空值时(字段类型是字符)或者字段为0时(字段类型是数字),此字段不参与where,一个是“empty”,表示当字段为空时,此字段依然参与where
name为“order_by”的input表示sql语句的order by属性。
注意:框架提供的方法只是提供,并不强制,开发者如果感觉使用不惯,可将list.php的admin_auto设置为0,开发者自行写php代码。
addedi.php:将“表头_plugin_shijiu”的数据添加修改
以上三个文件的数据操作是系统内置的,如果需要,请将“admin_auto”的内容分别设置为1,并且在form表单中默认submit的name为sub。
如果不需要框架自动处理数据,将“admin_auto”的内容分别设置为0。
开发者可在admin下添加任意文件,文件开头必须判断文件是否定义过“ADMIN”常量,没有定义停止页面运行。
后台框架是先输出统一的头部代行,再根据do参数引入各个文件,如果引入的文件如果只是数据计算,不需要页面显示,此时就会有点小问题,解决办法是将参数加上&no_header=1(get或者post形式都行),有这个参数后,框架变不会输出统一的头部,直接引入文件。
下面对mod文件夹做具体说明:
mod文件夹下的文件名规范为“*.act.php”,如:index.act.php,list.act.php
mod下的文件用于处理前台数据运算,开发者可自定义多个文件,每个文件开头必须判断是否定义过常量“INDEX”,没有定义停止页面运行
如果应用前台多个页面需要调用相同的函数,可在mod下新建fun.php,将代码写在里面。函数和变量以应用标识码做前缀,防止和默认程序冲突
下面对template文件夹做具体说明:
template文件夹下的文件名规范为“*.tpl.php”,如:index.tpl.php,list.tpl.php
template下的文件用于处理前台模板显示,每个文件开头必须判断是否定义过常量“INDEX”
comm.php:因为应用已经有自己的mod/fun.php,所以此文件主要用在自制模板中需要调用的全局文件。函数和变量以应用标识码做前缀,防止和默认程序冲突
自20130911版本开始,开发者无需定义应用的伪静态规则,应用伪静态统一网址为 /plugin/mod-act-**-**,系统会将**-**放入常量“PLUGIN_QUERY”中,开发者在插件中自行对此串进行解析。具体解析代码在comm/dd.config.php中。
update.php:应用安装升级文件,如果应用安装没有特别的需求,此文件留空即可。如果有特别需求,在此文件内写代码。每一个应用(不管是插件还是模板),必须带有plugin/应用标识码/update.php文件,没有特别需求就留空,但是必须要存在