MetInfo应用开发文档
1. 开发准备
1.1 前言
MetInfo应用制作介绍
MetInfo企业网站管理系统是米拓公司旗下的一款专门为企业开发的建站CMS,具有简单、易于SEO、安全稳定、多语言的特点,目前有30万活跃企业用户,分布全球各地。
Metinfo应用开发框架是基于MetInfo企业网站管理系统的一个应用开发包,使用Metinfo应用开发框架开发的网站功能可以直接嵌入当前系统,而且因为开发包集成了大量系统底层支持,使整个开发过程简单、快捷,并且支持系统升级。使用Metinfo应用开发框架开发的应用,通过我们审核后,可以上架到MetInfo应用市场,开发人员也可以直接入住MetInfo在线服务平台。
如果您想学习Metinfo企业应用开发,可以参看此文档,通过此文档的学习,可以直接掌握Metinfo企业应用开发方式。另外我们除文档外,也提供视频教程。如果您想直接上课学习Metinfo企业应用开发,直接和我们的开发人员进行交流,可以参加我们的Metinfo企业应用开发的在线课程。
1.2 基础知识与工具
基础知识
进行MetInfo应用开发需要掌握以下基础支持,如果没有相应基础,可以点击后面链接进行学习。
PHP:熟练,PHP教程;
HTML:基本了解,HTML教程;
CSS:基本了解 ,CSS教程;
JavaScript(简称JS)与 Jquery : 基本了解,JS教程、Jquery教程;
1.3 环境搭建
环境搭建
要使用MetInfo开发应用,就必须搭建 MetInfo运行所需要的环境以及安装 MetInfo ,以便在你自己的电脑上就能够制作和测试。搭建完成之后相当于你自己的电脑就是一个网站服务器,能够安装和运行网站,运行浏览器网址栏输入http://localhost/ 就能访问本地网站,当然,外网是无法访问的。
首先,你需要在本地电脑搭建网站运行环境:
MetInfo 基于 PHP+Mysql 架构,因此需要在你的电脑上安装能够支持 PHP+Mysql 程序运行的环境。(Mac OS自带Apache+PHP,下载MySQL即可;Windows可使用wamp、phpstudy等集成环境;Linux搭建lamp或lnmp)
然后,你需要在本地电脑安装 MetInfo :
1、从 MetInfo官网 下载最新版本;
2、在本地电脑 wamp 网站根目录下新建文件夹,名称自定义,如 metinfo ;
3、把下载的 MetInfo 最新版本解压到 metinfo 下;
注意解压后 metinfo 下要直接能找到 index.php 等众多程序文件,而不能在其子文件夹下;
4、运行浏览器,访问 http://localhost/metinfo/ 即可进入安装界面;
5、按照步骤一步一步操作完成安装;
** 注意**:数据库信息中的数据库名称自定义填写,数据库帐号 root ,密码不用填写。
1.4 代码规范
此规范为MetInfo应用开发代码书写建议,代码总体原则是“使代码清晰易读。整体代码风格要保持一致。”如果有书写代码没有规范的,请参考此文档。
代码规范
1、所有类,方法,文件名,链接地址等都要小写。常量要大写。没有强调要大写的,一律小写。(注:只有MetInfo应用框架重要的核心类,方法是大写的,应用中不要使用大写类,方法名称)
2、所有的 SQL语句的关键词都要大写,如:
SELECT * FROM met_applist WEHER
no > 1000 ORDER BY no DESC。
3、运算符,两边要打空格,如:
if ($a == $b || $c > $f) $c .= $m;
4、双引号里面有变量要用{}括起来。如 :
$a = "你好:{$a},有什么事情";
5、使用echo <<进行块输出的时候,里面的变量也要用{}括起来。
6、数组的键值要用单引号引起来。如 :
$array['key1']['key2']
7、循环、判断语句等,含有{}这种结构的语句。“{”(开始标签)之前要留空格。“(”之前也要留空格。“}”(结束标签)要另起一行,并且与函数类名或语句的关键词对齐,里面的代码块要一个TAB的缩进。
if ($a > $b) { // 运算符前后有空格, “(”前有空格,“{”前有空格
$a = 1; // 运算符前后有空格
$b = 2; // 一个tab的缩进
} else {// 另起一行,注意else两边有空格
$b = 3;
}
$i = 0;
while ($i > 10) { // 运算符前后有空格, “(”前有空格,“{”前有空格
$i++;// 一个tab的缩进
}
foreach ($array as $key => $val) {//“(”前有空格,“{”前有空格,“=>”前后后空格
$i++;// 一个tab的缩进
}
switch ($i) { //“(”前有空格,“{”前有空格
case 10://一个tab的缩进
$i++;//一个tab的缩进
break;//一个tab的缩进
}
8、当if语句后面只有一行代码的时候可以不是用{}但是()后面要加空格。如:
if ($a == $b || $c > $f) $c = $m; // if 后面有空格
9、函数的参数有用“,”(逗号隔开后)要有空格,函数定义的时候“)”与“{”之间有空格。里面的代码也要有一个tab的缩进。
function ceshi($a, $b) { // “{”前有空格“ $a,”逗号后有空格
$a += $b;//一个tab的缩进
}
10、类定义“{”之前要有空格,属性,方法之间要有一个空行。里面代码要有一个tab的缩进
class metinfo { //“{”前有空格
//一个空行
public $met;//一个tab的缩进
public $met2;
//一个空行
public function doindex() {//public 不要省略,类的方法内部代码规范同函数//一个tab的缩进
}
//一个空行
public function doindex() {//public 不要省略,类的方法内部代码规范同函数
}
}
11、代码中有明显功能区别的区块,可以适当加空行,但空行不宜太多。
注释规范
方法的注释(包括类的方法):
/** // 另起一行
* 函数作用
* @param int $afg 变量作用 // *后面空一格
* @param array $abbcvbcv 变量作用 // 变量对齐
* @param array $a 变量作用 // 变量作用对齐
* @param int $afff 变量作用 // int 对齐
* @return int 返回值作用 // 返回值不用写变量名
*/
functinon ceshi($a) {
}
1、总的来说,*对齐,整体风格保持一致。
2、/**要新起一行。
3、以/**开头,/与functinon的f对齐。
4、以*/结尾,*与functinon的u对齐。
5、*/要换行后,在写被注释代码。
6、中间已*开头,*与functinon的u对其。*之后要空一格
7、内容第一行,说明函数作用。
8、第二行开始说明函数参数,@param开头,之后依次说明类型,名称,作用,之间用空格隔开空格。可以适当加TAB,使类型,名称,作用3列对其。之间距离不宜过宽。
9、内容最后如果函数有返回值,用@return开头,只用依次是类型,作用。
注意:如果说明的变量取值为固定的几个值。较少可以在一行说明。较多可以新起一行说明,内容较多的情况下也可以。如
/*
* 函数作用
* @param int $a (1=左上角,2=右上角)
*/
或
/*
* 函数作用
* @param int $a
* 为1时,表示左上角
* 为2时,表示右上角
*/
//用作单行注释的时候,直接加载要注释的行后,多行注释的时候,单独起一行。如:
//多行注释
a = 1+1;
b = 2+1;//单行注释
类的注释:
/** // 另起一行
* 类作用 // *后面空一格
* 类字段注释
*/
class a {
pbulic b;
}
1、/**,*,*/的使用方法与函数一致,要与被注释的代码开头对其。
2、内容说明类的作用即可。
3、类字段注释写法和函数参数一致。
4、类方法注释写法和函数一致。
2. 创建应用
2.1 创建应用文件
创建一个全新应用的第一步是创建一个应用文件,整个应用框架的文件结构如下图所示。网站根目录下的app文件,就是整个应用的框架开发包。
应用框架文件结构:
|--app 应用框架文件夹,存放框架文件和应用文件
|--system 应用框架系统文件
|--app 应用文件夹
|--entrance.php 应用入口文件,实际指向框架入口。
|--yingyong1 一个应用
|--yingyong2 一个应用
|--admin 应用后台模块
|--templates 应用后台模板文件夹
|--web 应用前台模块
|--templates 应用前台模板文件夹
|--include 应用自定义公用文件
|--class 公用类文件
|--function 公用函数文件
|--plugin 应用插件
|--icon.png 应用图标
如上图所示,所有的企业应用都是放在app/app/
文件夹下,在此目录中新建一个文件夹,就是一个全新的应用。文件夹的名字必须只能由26个小写字母,数字,下划线组成。
yingyong2下的文件结构就是应用的内部文件结构。可以按照实际应用需求新建,比如plugin
文件,如果没有插件,可以不新建。
2.2 创建模块文件
应用模块可以分为两类,后台模块和前台模块,其中后台模块必须继承admin
类(后台模块基类),存放在admin
文件夹中。前台模块必须继承web
类(后台模块基类),存放在web
文件夹中。在应用模块中,模块类名称与方法名称,只能由小写字母,下划线,数字组成。模块文件要已UTF-8无BOM格式保存。
新建后台模块:新建一个“app/app/应用文件夹/admin/模块类名.class.php
”文件,则此文件就是一个后台模块文件。后台模块代码实例如下:
defined('IN_MET') or exit('No permission');//所有文件都是已这句话开头,保证系统单入口。
load::sys_class('admin');//包含后台基类,“.class.php”可以省略。
class 模块类名 extends admin {//继承后台基类。类名称要与文件名一致
public function __construct() {
parent::__construct();//如果重写了初始化方法,一定要调用父类的初始化函数。
}
public function doindex(){//定义自己的方法
global $_M;//引入全局数组
//自己的代码
require $this->template('own/index');//引入模板文件,必须global $_M
}
}
新建前台模块:新建一个“app/app/应用文件夹/web/模块类名.class.php
”文件,则此文件就是一个前台模块文件。前台模块代码实例如下:
defined('IN_MET') or exit('No permission');//所有文件都是已这句话开头,保证系统单入口。
load::sys_class('web');//包含后台基类,“.class.php” 可以省略。
class 模块类名 extends web {//继承后台基类。类名称要与文件名一致
public function __construct() {
parent::__construct();//如果重写了初始化方法,一定要调用父类的初始化函数。
}
public function doindex(){//定义自己的方法
global $_M;//引入全局数组
//自己的代码
require $this->custom_template('own/index',1);//引入模板文件,必须global $_M
}
}
2.3 创建模板文件
应用模板结构同模板制作中的模板结构,当前应用框架可以兼容全站调用的模板标签,但是在某个模块下使用的标签无法再页面中使用。不要在应用框架中使用模板标签。模板标签会在以后专门优化,优化后的模板标签将可以直接在模板制作和应用框架中使用。
模板文件存放在应用文件的模块文件夹下。另外应用的模板文件都是PHP文件,不要用html或htm。模板文件要用utf-8无BOM格式保存。前台模板文件和后台文件语法是一样的。
后台模板文件
一般应用模板结构(后台文件):存放在“app/app/应用文件夹/admin/templates/
”目录下,后台模板一般使用基类的template方法引入。
html代码
只有当这个文件是页面整体(包括包含文件)是最后一个文件时候才添加,
// 一般在应用制作中的可以自定义的文件,都不是最后一个,所以一般不需要添加。
注意:复制上面代码时候,请复制后将“//页面结尾”后的代码删除。
前台模板文件
一般应用模板结构(前台文件):存放在“app/app/应用文件夹/web/templates/
”目录下,前台模板一般使用前台基类的custom_template方法引入
html代码
只有当这个文件是页面整体(包括包含文件)是最后一个文件时候才添加,
//一般在应用制作中的可以自定义的文件,都不是最后一个,所以一般不需要添加。
注意:复制上面代码时候,请复制后将“//页面结尾”后的代码删除。
模板结构详解
一般代码格式:
上面代码中的1、2行和6、7行是必须要的,用于保护PHP嵌入代码,而且需要顶格写。
仔细看会发现,其实就是用HTML的注释符号包裹。
PHP嵌入代码可以直接写到模板页面:
-
[{$val[updatetime]}]
{$val[title]}
上面代码中的3至7行与12至16行都是PHP嵌入代码,之外的就是HTML代码。
PHP嵌入代码可以无限的在模板中使用。
PHP嵌入代码有两个特殊情况:
页面开头代码:
上面代码中的第一行与PHP嵌入代码格式略有不同,要注意这一点,每个模板文件的开头必须这样写。
页面结尾代码:
上面代码中的第四行,与PHP嵌入代码格式略有不同,要注意这一点,每个模板文件的尾部必须这样写。
注意:上面代码第四行最后的-->不是每个页面都需要,只有页面引用的最底部文件才需要,如果是中间或头部引用页面请去除-->,这个问题会体现在页面中直接出现-->类似的符号。
2.4 应用嵌入系统
第一步,注册应用
应用必须先在met_applist表中进行注册。表结构如下:
字段名
类型
是否为空
默认
属性
注释
id
int(11)
否
无
主键
no
int(11)
否
无
应用编号,本地自己开发的应用编号
在2001到10000之间。2000以前是系统保留,
10000之后为上线到官方应用市场中
使用的编号,由官方分配。
ver
varchar(50))
否
无
应用版本号
m_name
varchar(50))
否
无
应用系统名称,也就是你在app/app下建立
应用夹名称。他是系统识别应用的一个名称。
只能是英文、数字、下换线组成。
m_class
varchar(50))
否
无
后台“我的应用”中默认启动的模块类名称。
m_action
varchar(50))
否
无
后台“我的应用”中默认启动的应用模块的方法。
appname
varchar(50))
否
无
应用名称,如:防伪码查询,这种文本文字,
也可以使用$_M[word][]中的语言数据。
这样就有可以实现多语言。
使用这种方法直接在字段中填写$_M[word][]即可。
info
text
否
无
应用的简介描述,同样可以使用$_M[word]
中的语言变量。
addtime
varchar(50))
否
无
应用发布时间。unix时间戳。
updatetime
varchar(50))
否
无
应用更新时间。unix时间戳。
一条数据即代表一个应用,每个应用都必须要注册,注册后可以在后台“我的应用”中看到此应用。
注:updatetime字段由于书写错误,在5.3.0之前版本被错写成updateime。
第二步,建立前台入口
建立前台文件入口,直接访问前台入口文件,可以执行指定的前台模块的方法。如果没有前台模块,可以不新建。前台页面需要自己新建一个文件,比方说ceshi/index.php文件。然后再文件里面,指定下面一个常量。
一般代码结构如下:
define('M_NAME', 'ceshi');//指定应用名称,即创建的应用的文件夹的名称。
define('M_MODULE', 'web');//指定模块类型
define('M_CLASS', 'ceshi');//指定模块,即创建的前台模块类名称,不要加“.class.php”。
//指定调用的模块方法,必须是用“do”;开头的方法。
define('M_ACTION', 'doindex');//或define('M_ACTION', $GET['action']);
require_once '../app/app/entrance.php';//包含入口文件
第三步,进入后台入口
从后台如后访问应用模块,后台模块不需要向前台一样建立文件才可以访问,直接通过后台通用入口即可访问。后台通过入口地址:**admin/index.php?n=应用名称&c=模块类名称&a=方法名称
**方法名称必须已do开头
至此一个新的应用就创建完成。下面可以对各个模块进行编码,来实现不同的应用。在正式开发应用之前,请先学习下系统数据结构、系统调用、前台控件、应用开发规范内容。可以大幅节约开发时间,也可使开发的应用符合我们的开发规范,从而可以正常升级。
3. 系统调用
3.1 数据结构
数据结构
序号表
名称
说明
1
met_admin_array
用户组表
2
met_admin_table
用户表
3
met_admin_column
后台导航表
4
met_config
网站配置信息表
5
met_lang
网站语言设置表
6
met_language
网站语言表
7
met_column
网站栏目信息表
8
met_flash
bannner管理信息表
9
met_news
新闻模块信息表
10
met_product
产品模块信息表
11
met_download
下载模块信息表
12
met_img
图片模块信息表
13
met_job
招聘模块信息表
14
met_cv
简历信息表
15
met_feedback
反馈系统信息表
16
met_message
留言系统信息表
17
met_link
友情链接信息表
18
met_parameter
字段信息表
19
met_list
字段选项信息表
20
met_plist
字段内容信息表
21
met_mlist
留言字段内容信息表
22
met_flist
反馈系统字段内容信息表
23
met_skin_table
网站模板信息表
24
met_templates
模板配置数据表
25
met_infoprompt
后台短消息表
26
met_wapmenu
手机版底部
27
met_sms
发送短信信息表
28
met_label
热门标签信息表
29
met_online
在线客服信息表
30
met_otherinfo
其他信息字段表
31
met_visit_day
访客信息表
32
met_visit_detail
访客数据分析信息表
33
met_visit_summary
访客每日统计信息表
34
met_app
应用信息表
35
met_ifcolumn
栏目接口表
36
met_ifcolumn_addfile
应用生成文件所调用事件的信息表
37
met_ifmember_left
会员侧导航信息表
38
met_app_plugin
应用插件表
39
met_applist
应用注册表
3.2 常量与$_M数组
常量
PATH_WEB:网站根目录
PATH_CONFIG:配置文件根目录
PATH_CACHE:缓存文件根目录
PATH_OWN_FILE:当前执行的应用的class的根目录
PATH_APP_FILE:当前执行的应用的根目录
PATH_ALL_APP:应用文件根目录
TIME_SYS_START:程序运行开始时间
MAGIC_QUOTES_GPC:表单变量自动过滤
HTTP_HOST:当前访问的主机名
HTTP_REFERER:来源页面
PHP_SELF:脚本路径
PATH_TEM:模板文件地址(前台有效)
$_M数组
$_M 数组是一个包含了网站设置,系统调用等信息的总和数组,具体内容如下:
全站通用:
$_M[config]:网站配置数组,里面可以查询到所有的网站配置数据。
$_M[form]:提交的GET,POST,COOKIE表单数组。在系统中不要直接使用$_POST,$_GET,$_COOKIE,
这些都是没有过滤的,$_M[form]中是已经安全过滤后的数组。
$_M[langlist]:语言设置数组,其中$_M[langlist][web]为前台语言设置,
$_M[langlist][admin]为后台语言设置。
$_M[lang]:前台语言,如果你是在网站前台,则这个值是你当前访问的语言,
如果是后台,则这个值是你当前编辑的语言。
$_M[table]:系统表名称。
$_M[url]:系统一些常用URL入口地址。
$_M[url][site_admin] :网站后台地址
$_M[url][site] :网站前台地址
$_M[url][entrance] :框架入口地址
$_M[url][own] :当前执行的应用根目录地址
$_M[url][app] :应用根目录地址
$_M[url][pub] :系统公用文件(html.css,js)地址
$_M[url][ui] :当前class所使用的UI地址,前台为“系统ui根目录/web”;,
后台为“系统ui根目录/admin”。
$_M[user][cookie]:用户cookie信息,建议不要直接取值,使用get_met_cookie()取值。
$_M[word]:当前的语言参数。
$_M[plugin]:系统插件数组。
后台专用:
$_M[langset]:后台语言,前台此值为空。
$_M[url][own_form] :系统提供的一个可以调用的后台入口URL,“n=应用名称&c=模块类名称&a=方法名称”
,这三个值,系统会帮助你自动选定为当前执行的方法的应用,模块类。也就是n,c的值。你只需要修改“a=方法名称”。
$_M[url][own_name] :系统提供的一个可以调用的后台入口URL,
“n=应用名称&c=模块类名称&a=方法名称”
,这三个值,系统会帮助你自动选定为当前执行的方法的应用。也就是n的值。你只需要修改“c=模块类名称”和“a=方法名称”。
$_M[url][adminurl] :系统后台入口URL。
$_M[url][tem] :系统后台模板文件地址,应用开发中请不要使用。
$_M[url][own_tem] :系统后台模块模板文件地址,应用开发中请不要使用。
前台专用:
$_M[html_plugin]:WEB插件数组
$_M[flashset]:flash设置数组
3.3 接口
接口是现有系统功能或者其他应用模块为应用一个系统调用,应用可以通过设置参数,在现有系统功能或者其他应用模块中完成一些功能。通过接口,应用可以在系统功能或其他应用执行一些固定操作,或者页面添加一些固定内容。下面来介绍下现有接口:
栏目接口
作用:可以在栏目设置中添加应用的栏目,并完成一些固定的操作。
设置方法:通过向met_ifcolumn与met_ifcolumn_addfile表中写入数据来达到效果。
met_ifcolumn 栏目接口表
作用:设置栏目接口
字段名
类型
是否为空
默认
属性
注释
id
int(11)
否
无
主键
no
int(11)
否
无
应用编号
name
varchar(50)
否
无
应用系统名称
appname
varchar(50)
否
无
应用名称,添加栏目的时候选择模块时候的名称,
可以和你的应用名称不一样,比如你应用叫
防伪码查询系统,这里可以写防伪码模块。
支持多语言写法$_M['word'][]。
addfile
tinyint(1)
否
1
是否在添加栏目的时候,在前台添加一个文件。
memberleft
tinyint(1)
否
0
是否向会员左侧导航添加导航。如果值为1,
则在添加栏目的时候把现在这个栏目的链接
添加到会员左侧导航。
uniqueness
tinyint(1)
否
0
是否只允许只添加一个栏目,如果值为1,
表示这个模块只能添加一个,0表示可以添加多个。
fixed_name
varchar(50)
否
无
添加的栏目文件夹名称是否允许用户自定义,
如果为空表示可以自定义栏目文件夹名称,
如果不为空则无法自定义文件夹。
met_ifcolumn_addfile表 新建文件列表
作用:当添加栏目时候,需要新建文件的时候,会按此表设置,建立文件,一条数据就是一个文件。
字段名
类型
是否为空
默认
属性
注释
id
int(11)
否
无
主键
no
int(11)
否
无
应用编号
filename
varchar(255)
否
无
新建的文件名,比如index.php
m_name
varchar(255)
否
无
M_NAME的指定值
m_module
varchar(255)
否
无
M_MODULE的指定值
m_class
varchar(255)
否
无
M_CLASS的指定值
m_action
varchar(255)
否
无
M_ACTION的指定值
实例:
比方说我插入一条如下数据:
id:1
no:10001
filename:index.php
m_name:ceshi
m_module:web
m_class:ceshi
m_action:doindex
则在新建栏目,并指定了栏目文件夹为ceshi后,会在网站根目录下新建ceshi/index.php文件。文件内容如下:
# MetInfo Enterprise Content Management System
# Copyright (C) MetInfo Co.,Ltd (http://www.metinfo.cn). All rights reserved.
define('M_NAME', 'ceshi');
define('M_MODULE', 'web');
define('M_CLASS', 'ceshi);
define('M_ACTION', 'doindex');
require_once '../app/app/entrance.php';
# This program is an open source system, commercial use, please consciously to purchase commercial license.
# Copyright (C) MetInfo Co., Ltd. (http://www.metinfo.cn). All rights reserved.
会员接口
met_ifmember_left 会员左侧导航表
作用:通过设置此表可以向前台会员模块添加左侧导航,在此表添加的左侧导航将在“会员中心首页”后面显示。
字段名
类型
是否为空
默认
属性
注释
id
int(11)
否
无
主键
no
int(11)
否
无
应用编号
columnid
int(11)
否
无
栏目编号,当设置了栏目编号,
会优先取栏目信息。
title
varchar(50)
否
无
导航栏的标题,支持多语言写法$_M['word'][]。
foldername
varchar(255)
否
无
导航栏所指向的文件夹地址
filename
varchar(255)
否
无
导航栏所指向的文件地址
3.4 插件
插件是可以在某个类的某个方法下插入代码执行的控件。可以让编码人员在系统插件所指定的地点,通常是某个类的某个方法执行的某个阶段后插入一段自己的代码。用于处理一些事务。
创建步骤
1、在应用的目录下新建“plugin/plugin_应用系统名.class.php”。
2、在里面新建一个类“plugin_应用系统名”;。
3、在这个类里面新建方法,方法名称为“插件系统名称”。
实例代码:
defined('IN_MET') or exit('No permission');
class plugin_myapp{
public function doweb(){
global $_M;
echo 'doweb';
}
public function doadmin(){
global $_M;
echo 'doadmin';
}
}
4、在表met_app_plugin写入调用信息后,系统会自动在插件处调用应用的插件方法。
met_app_plugin表结构:
字段名
类型
是否为空
默认
属性
注释
id
int(11)
否
无
主键
no_order
int(11)
否
无
排序,决定不同应用的代码执行的先后顺序。
no
int(11)
否
无
应用编号
m_name
varchar(50)
否
无
应用系统名称
m_action
varchar(50)
否
无
所调用的插件系统名称,也就是执行的方法名称。
effect
tinyint(1)
否
无
此应用的插件是否生效,1生效,0不生效。
现有插件介绍
当前系统有两个插件。doweb插件和doadmin插件
doweb插件:
插件系统名称为doweb,可以在系统二级基类web.class.php前台基类初始化的最后插入代码。doweb插件,提供3个特殊变量,通过修改这三个变量内容,可以改变前台页面的效果。
1、 $_M['html_plugin']['head_script'],可以在页面前插入html代码,一般用来添加JS代码。写成:
$_M['html_plugin']['head_script'].="";
2、$_M['html_plugin']['foot_script']名可以在页面底部插入html代码(前,但是会被包在底部代码的DIV里面)。一般也是用来添加JS代码。写成:
$_M['html_plugin']['foot_script'].="";
3、$_M['html_plugin']['top_script'],此变量是一个数组,可以在页面顶部的语言切换页面插入HTML代码。一般用来插入一个a标签的链接。写成:
$_M['html_plugin']['top_script'][] = "";
$_M['html_plugin']['top_script'][] = "";
doadmin插件:
插件系统名称为doadmin,可以在系统二级基类admin.class.php后台基类初始化的最后插入代码。
注意事项:
在当前系统插件中只能使用DB类与$_M数组两个系统调用,其他的类,方法等系统调用无法使用。
3.5 类与函数
类
序号
名称
作用
使用范围
1
基类
整个框架的核心基础类
继承前台、后台模块基类,
或直接继承基类
2
后台模块基类
后台模块核心类
继承后台模块基类
3
前台模块基类
前台模块核心类
继承前台模块基类
4
加载类
用来加载系统或应用的函数库和类的类
全局
5
数据库操作类
用来操作数据库的类
全局
6
发送邮件类
发送邮件
需要手动使用load::sys_class加载
7
远程连接类
远程连接服务器,实质是用PHP模拟浏览器
发送一个post给某个网址,
可以把网址输出内容回传回来。
需要手动使用load::sys_class加载
8
短信发送类
使用后台短信功能,发送短信。
需要手动使用load::sys_class加载
9
上传文件类
上传文件
需要手动使用load::sys_class加载
10
水印类
给图片添加水印
需要手动使用load::sys_class加载
11
缩略图类
对图片进行缩小
需要手动使用load::sys_class加载
12
后台选项卡控制类
提供默认的后台选项卡样式,和调用方法。与系统前端空间配置使用。
后台模块
13
表格数据获取类
和系统前端控件中的表格控件配合使用,过去数据返回给表格控件。
需要手动使用load::sys_class加载
函数
序号
名称
作用
使用范围
1
全局通用函数
全局通用的常用函数
全局
2
前台通过函数
前台通用的常用函数
前台模块
3
后台通用函数
后台通用的常用函数
后台模块
4
用户登录函数
后台权限管理相关函数
全局
5
文件处理函数
文件处理相关函数
需要手动使用load::sys_func加载
6
字符串管理函数
字符串处理相关函数
需要手动使用load::sys_func加载
7
数组管理函数
数组处理相关函数
需要手动使用load::sys_func加载
4. 前端控件
4.1 表单控件
利用前端控件可以迅速构建交互体验佳的功能操作页面,大量的节省工作量,仅仅需要一些复制代码的操作。
点此下载前端控件示例代码大全
表单控件
表单代码结构
序号
控件名称
说明
1
功能分区
用于在单个页面中选项多的时候划分区域,提升用户体验
2
注意事项
用户给用户较全面的提示信息
3
简短文本输入框
用于输入简短文字
4
文本输入框
用于输入较长文字
5
编辑器
加载ckeditor可见即可得编辑器
6
单选按钮
用于让用户选择一项
7
多选按钮
用于让用户可选择多个选项
8
下拉菜单
用于让用户可以下拉选择一项
9
上传组件
便于用户上传图片或文件
10
颜色选择器
便于用户直接选择颜色
11
标签增加器
便于用户输入多个文字标签,可用于多个邮箱、关键词等等
12
滑块
可以让用户拖动滑块选择对应的数值
13
日期选择器
便于选择具体日期
14
联动菜单
可自定义菜单数据的联动菜单,默认包含中国城市数据
15
动态隐藏显示选项
根据单选、多选的操作实现动态显示指定选项
16
模态对话框
可以替代alert,轻松实现更为丰富的交互体验
4.2 表单验证
通过HTML标签属性的方式进行表单验证,因此使用方式就是给HTML标签加上对应的属性。
注意:form表单的class类需要加上'ui-from',否则无法执行验证方法,验证的属性参数需要填写在对应表单控件标签上。
属性名
说明
支持类型
data-required
输入框或选项的值不能为空
input/textarea/radio/checkbox/select
data-errortxt
自定义错误提示,可以不设置,不设置则采用默认文字
input/textarea/radio/checkbox/select
data-size
限制输入框的文字字数,支持限制最小、最大、字数范围
input[text]/textarea
data-mobile
验证输入的值是否为手机号码
input[text]
data-email
验证输入的值是否为邮箱地址
input[text]
data-password
用于重复输入密码时验证是否一致
input[type='password']
data-ajaxcheck-url
可以无刷新验证输入框信息,一般用于验证用户名是否被注册
input[text]
data-norepeat
不允许重复值
input[type='text/password']
data-confirm
弹框提示信息让用户再次确认操作
a/input[type='submit']
data-custom
自定义验证
input/textarea/radio/checkbox/select
4.3 表格控件
表格控件通过特有的方式获取数据,获取的数据支持无刷新分页,可以对表格数据进行相应的筛选、搜索,甚至是动态编辑、增加表格内容。
获取表格数据
说明:最基本的表格数据展示功能,自动实现无刷新分页。
参数:参数请写在table标签上
data-table-ajaxurl //表格数据来源,URL
data-table-pagelength //表格每页显示条数,数值
HTML代码结构:
排序
标题
前台
推荐
置顶
更新时间
排序
标题
前台
推荐
置顶
更新时间
注意:class类要一样,尤其ui-table,是激活控件的class类
PHP代码实例:
function dotable_list_json(){
global $_M;
$table = load::sys_class('tabledata', 'new'); //加载表格数据获取类
$where = "lang='{$_M[form][lang]}'"; //查询条件
$order = "no_order"; //排序方式
$array = $table->getdata($_M[table][news], '*', $where, $order);//获取数据
foreach($array as $key => $val){
$list = array();
$list[] = $val[no_order];//当前行的第一列
$list[] = $val[title]; //当前行的第二列
$list[] = $val[displaytype]?'显示':'不显示';
$list[] = $val[com_ok]?'是':'否';
$list[] = $val[top_ok]?'是':'否';
$list[] = date('Y-m-d',strtotime($val[updatetime]));
$rarray[] = $list;
}
$table->rdata($rarray);//返回数据
}
查看表格数据类的使用方法
表格效果:
表格数据筛选、搜索
说明:能够实现让指定的input输入框或select下拉菜单输入信息后无刷新检索。
参数:
data-table-search //启用搜索,1为启用。
启用搜索后,该搜索框或下拉菜单的name、value会被传递到表格数据源URL,只需要在那里获取到值并进行数据库查询即可。
示例:
HTML代码部分(筛选)
这段HTML代码可以放到表格thead>th标签中
HTML代码部分(搜索)
PHP代码示例:
function table_edit_json(){ //表格数据获取
global $_M;
/*获取表格ajax传递的参数*/
$term1 = $_M[form]['search_title']; //获取搜索关键词
$term2 = $_M[form]['search_displaytype']; //获取搜索关键词
$term3 = $_M[form]['search_com_ok']; //获取搜索关键词
//在还可以获取多个搜索关键词
/*查询表*/
$search = $term1 ?"and title like '%{$term1}%' ":''; //增加查询条件
$search.= $term2!=''?"and displaytype = '{$term2}' ":''; //获取查询条件
$search.= $term3!=''?"and com_ok = '{$term3}' ":''; //获取查询条件
//如果有更多查询条件,还可以继续增加
$table = load::sys_class('tabledata', 'new');
$where = "lang='{$_M[form][lang]}' {$search}"; //在条件语句中加入查询条件 $search
$order = "no_order";
$array = $table->getdata($_M[table][news], '*', $where, $order);
foreach($array as $key => $val){
$list = array();
$list[] = "";
$list[] = "";
$list[] = "{$val[title]}";
$list[] = $val[displaytype]?'显示':'不显示';
$list[] = $val[com_ok]?'是':'否';
$list[] = $val[top_ok]?'是':'否';
$list[] = date('Y-m-d',strtotime($val[updatetime]));
$list[] = "编辑|删除";
$rarray[] = $list;
}
$table->rdata($rarray);
}
依旧是表格数据获取部分的PHP代码,只是增加了查询条件。
如果搜索框或下拉菜单需要放在表格右上角建议用下面的HTML标签包裹。
让表格内容可以直接编辑和保存
表格需要嵌套form表单并设置数据保存的URL:
因为表格数据源支持返回HTML,因此在需要让用户设置的选项中返回input输入框。
部分代码示例:
$list[]="";
这样,就可以在显示的页面对输入框进行编辑。
但是编辑却无法保存,也不清楚到底保存的是哪些行的信息,我们需要一个保存按钮和每行设定一个选择项。
选择项:
在表格数据源中可以给每行设置选择项,建议放在第一列,name名称必须为id。
$list[]="";//第一列
然后,我们需要有个全选的选择项,请放在 table > thead > th 里面。
其中 input 的属性 data-table-chckall="id" 就是启用全选的功能。
保存按钮:
支持input[type='submit']或者select提交的方式。
input[type='submit']:
请放在tfoot标签中,th中的colspan是表格单元格可横跨的列数,需要与表格的总列数相同,class="formsubmit"是默认样式控制,请务必保留。
select下拉菜单:
参数说明:
data-isubmit 1为启用select提交表单,如需要将select做为表单提交功能,必须设置。
效果:
下拉菜单选择提交后如何在表单处理页面进行处理?
提交表单后,select的name和value能够被传递到form表单中,因此可以根据传递的值进行处理。
如何获取需要保存的信息ID?
保存信息时选中的行的选择项ID会以逗号','隔开,储存在name名称为allid的input中(该input隐藏不可见),因此可以在表单处理页面中通过 $_M[form][allid] 获取到选择项,拆分后就可以使用。
有多个保存按钮,比如一个保存一个删除,提交后如何区分?
input[submit]提交的时候其name值会赋给name为submit_type的隐藏input,因此可以在表单处理页面中通过 $_M[form][submit_type] 来获取保存的类型。
动态增加行
设置一个链接或按钮,点击后可以动态增加一行,并且点击保存后可以将此行数据增加到数据库中。
首先,需要设置一个按钮,一般放在表格左上角,以及表格底部:
...
...
参数说明:
data-table-addlist
新增行的数据源URL,给链接或按钮设置此属性后,点击该按钮将会执行动态增加行,同时会给数据源传递一个不断增量的变量 $_M[form][ai]
,用于累计增加的数量和区分每个新增的行。
数据源PHP代码示例:
function do_table_add_list(){
global $_M;
$id = 'new-'.$_M[form][ai];
$metinfo ="返回的HTML代码"; //HTML代码请看下面的示例
echo $metinfo;
}
返回的HTML代码:
撤销
这样点击按钮或链接,页面表格底部就能自动增加一行。
在执行保存的时候,为了区分每行的数据,可以设定新增行的选择项值为 'new-$_M[form][ai]' ,这样在保存的时候可以用PHP分析带 'new-' 就是要新增的数据,上面PHP代码示例就很好的利用了这个方法。
删除行
说明:动态增加的行需要删除的时候就可以采用这个方式。
用法:只需增加一个class为delet的链接或按钮即可,该按钮或链接需要放在该行的td代码中,一般放在最右边,点击后即可删除该行。
示例代码:
撤销
PHP处理表格数据示例:
function dosave(){
global $_M;
$list = explode(",",$_M[form][allid]) ; //将选择项列表ID拆分为数组
$type = $_M[form][submit_type]; //表格提交类型
foreach($list as $id){
if($id){//不能为空
if($type=='save'){//用户点击了保存按钮
$oldwords = $_M['form']['oldwords-'.$id];
$newwords = $_M['form']['newwords-'.$id];
$newtitle = $_M['form']['newtitle-'.$id];
$url = $_M['form']['url-'.$id];
$num = $_M['form']['num-'.$id];
if(is_number($id)){//修改
$query = "UPDATE {$_M['table']['label']} SET
oldwords = '{$oldwords}',
newwords = '{$newwords}',
newtitle = '{$newtitle}',
url = '{$url}',
num = '{$num}'
WHERE id = '{$id}' and lang = '{$_M[lang]}'
";
}else{//新增
$query = "INSERT INTO {$_M['table']['label']} SET
oldwords = '{$oldwords}',
newwords = '{$newwords}',
newtitle = '{$newtitle}',
url = '{$url}',
num = '{$num}',
lang = '{$_M[lang]}'
";
}
}elseif($type=='del'){//删除
if(is_number($id)){
$query = "DELETE FROM {$_M['table']['label']} WHERE id='{$id}' and lang='{$_M[lang]}' ";
}
}
DB::query($query);
}
}
turnover("{$_M[url][own_form]}a=doindex");
}
自定义每行class类
说明:能够自定义表格每行class类,需要在表格数据来源中JSON的回传数据处理中增加。
参数:toclass
示例代码:
function table_list_json(){
global $_M;
$table = load::sys_class('tabledata', 'new');
$where = "lang='{$_M[form][lang]}'";
$order = "no_order";
$array = $table->getdata($_M[table][news], '*', $where, $order);
foreach($array as $key => $val){
$list = array();
$list[] = $val[no_order];
$list[] = $val[title];
$list[] = $val[displaytype]?'显示':'不显示';
$list[] = $val[com_ok]?'是':'否';
$list[] = $val[top_ok]?'是':'否';
$list[] = date('Y-m-d',strtotime($val[updatetime]));
$list['toclass'] = 'class1'; //给该行定义class类
$rarray[] = $list;
}
$table->rdata($rarray);
}
指定列设置class类
说明:能够给指定一列设置class类,在 table > thead > th 标签上定义。
参数:data-table-columnclass="定义class类名"
示例代码:
排序
标题
前台
推荐
置顶
更新时间
监听表格数据源事件
说明:有时候需要调试数据,那么就需要监听表格数据源事件,支持监听表格数据加载完成后、点击分页,获取到服务器的数据尚未加载到页面时、点击分页,数据加载完成后。
$(document).on( 'init.dt', function (e, settings, json) { //表格加载完成时执行
//json = JSON.stringify(json, null, 2 );
//alert(json); //输出JSON
var api = new $.fn.dataTable.Api( settings );
api.on( 'xhr.dt', function ( e, settings, json ) { //点击分页,获取到服务器的数据时
//json = JSON.stringify(json, null, 2 );
//alert(json);
});
api.on( 'draw.dt', function ( e, settings, json ) { //点击分页,数据重载完成后
} );
});
默认样式:
适用于表格左上角的信息增加按钮。
编写在table标签上面,一般与搜索框放在一起,搜索框在右边,增加按钮在左边。
效果:
带效果的class类:
ui-float-left //左浮动
ui-float-right //右浮动
none //隐藏区块
met-gray //灰色#9a9a9a
met-center //内容居中
ui-input //文本输入框样式
4.4 自定义控件
如果现有控件无法满足你的需求,你可以提交需求给我们,我们将会不断完善前端框架,以减少开发人员工作量。
如果需要自定义执行JS或一些页面效果,可以采用本文档的方式。
方法一:按系统内置JS代码架构
应用页面会自动加载【应用文件夹/admin/templates/js/own.js】文件
own.js文件代码结构:
define(function(require, exports, module) {
var common = require('common'); //加载公共函数文件(Jqery、语言文字等)
//这里开始编写自定义JS代码....
});
采用 seajs 模块化加载框架,以后会不断丰富架构中的方法,因此直接在模块化中编写自定义JS是最好的方式,一样的可以实现所有所需的效果。
seajs可以加载的模块:
//应用目录路径,加载JS文件
require('own/admin/templates/js/add');
//其中 own 为应用根目录路径简写,只能在require中使用
//用 require 加载js文件无需编写后缀,而加载css的时候就需要编写后缀
//语言文字
var langtxt = common.langtxt(); //获取语言文字
alert(langtxt.jsok); //等同于$_M[word][jsok],因此可以通过修改后缀jsok来或许所需语言文字。
关于sea.js的更多用法,可以查看相关文档:http://seajs.org/docs/
方法二:按自己的方式(不推荐)
可以自定义foot文件,然后加载所需JS库或文件。也可以直接在页面里面直接加载JS文件。
foot.php
文件路径:网站根目录app/system/include/public/ui/admin/foot.php
你可以将此foot.php复制到后台模板目录下,然后将应用的后台模板文件底部:
require $this->template('ui/foot');
改为
require $this->template('own/foot');
这样就会调用自定义底部文件。
5. 其他
5.1 开发规范
开发规范是应用开发过程中必须遵守的规范开发,按照规范进行开发,可以是使应用更好的融入系统,也可以使系统升级不至于影响到应用程序。现有规范包括如下几点,如要实现下述功能,请按规范要求进行。
新建数据表
在系统中如果新建了数据表,请按照此规范把新的数据表添加到系统中去,并按照系统规定调用。点击浏览
多语言实现
要在系统中实现多语言,请安装此规范实现。点击浏览
权限控制
系统功能如果要对不同的管理员的添加,修改,删除权限进行区分,请按照此规范文档操作。点击浏览
应用打包
开发好的应用,如果要上线至MetInfo应用市场,需按照此规范进行应用打包。点击浏览
5.2 更新文档
5.3.0 版本应用框架更新简报
系统版本:5.3.0
更新内容:
1、框架优化,插件意外报错导致页面打不开,
2、框架对linux,IOS系统环境的兼容。
3、栏目接口,当栏目唯一的时候,所有语言只能添加一个,应该是每个语言一个。
4、own_class() 和own_func() 增加自定义文件路径功能。
5、发送邮件类jmail,增加发送邮件端口选项。
6、远程连接类curl,增加报错属性。
7、add_table() 与del_table() 增加多表同事操作。
8、文件操作增加了traversal()函数,遍历文件夹并回去所有文件
9、数组函数stringto_array() 函数,默认值都默认为空。
10、$_M[url]数组新增了adminurl与own_name俩个路径,分别是后台入口URL(与own_form比,不含啊n,c值)与应用入口URL(与own_form比,不含c值)
11、修复前台插件中$_M['table']和$_M['form']数组错误问题。
12、met_applist表单词错误,updateime修复为updatetime
13、增加后台通用函数configsave(),mysqlcheck(),sitemap_robots()。
你可能感兴趣的:(MetInfo开发文档)