mcms二次开发_YzmCMS二次开发手册

摘要:YzmCMS是采用MVC设计模式开发,基于模块和操作的方式进行访问,采用单一入口模式进行项目部署和访问,无论访问任何一个模块或者功能,只有一...

YzmCMS是采用MVC设计模式开发,基于模块和操作的方式进行访问,采用单一入口模式进行项目部署和访问,无论访问任何一个模块或者功能,只有一个统一的入口。

如果您在二次开发,建议开启APP_DEBUG,在根目录下index.php文件的12行。

一、基本目录结构..../              根目录

..../application   全站应用目录

..../cache         缓存目录[必须可写入]

..../common        全站公共目录[必须可写入]

..../uploads       默认上传目录[必须可写入]

..../yzmphp        程序核心目录[不建议修改]

..../index.php     程序单一入口文件

..../.htaccess     Apache伪静态文件[如您不是Apache软件,可根据此规则重写伪静态]

..../nginx.conf    Nginx下伪静态文件

application目录下每一个文件夹都是一个单独的模块(module)

每个模块下都有四个文件夹(common、controller、model、view)一个文件(index.html),这几个文件时必须有的,新建模块时也一定要有这几个文件。

以admin模块举例:application

---admin

------common(模块公共目录)

------controller(模块控制器目录)

------model(模块模型目录)

------view(模块视图目录)

二、创建一个新控制器

controller目录中的每一个.php文件都是一个控制器,控制器名称都以.class.php后缀结尾。

新建一个控制器:test

文件名称:test.class.php,控制器类的类名称与控制器文件名必须相同

//这两行必须要,后台权限控制

defined('IN_YZMPHP') or exit('Access Denied');

yzm_base ::load_controller('common', 'admin', 0);

//这两行必须要,后台权限控制

class test extends common {

//访问该控制器的该方法的URL:

//http://test.yzmcms.com/admin/test/init

public function init() {

echo '程序默认加载控制器中的init方法';

}

//访问该控制器的该方法的URL:

//http://test.yzmcms.com/admin/test/mytest

public function mytest() {

echo '这个是mytest方法';

}

}

URL地址说明:

你的网址/模块名称/控制器名称/方法名称

//加载其他控制器

如:yzm_base ::load_controller('common', 'admin', 0);

说明:yzm_base ::load_controller('控制器名称', '模块名称', 是否初始化);

//加载系统类

如yzm_base ::load_sys_class('page','',0);

说明yzm_base ::load_sys_class('类名称','扩展地址',是否初始化);

如果初始化,返回的是一个类的实例化对象,否则只是加载该类。

三、常见方法说明

本系统中最常用的三种方法:D()方法、 M()方法、  U()方法、

D方法

D是data 的首字母,参数为一个表名称,返回的是一个数据表对象(在YzmCMS3.0以下版本中是M方法)

//实例化一个数据表对象,只传入表名即可,以下所有操作表示在对test表进行操作

$db = D('test');

//添加内容[成功:返回自动增长的ID,失败:false]

//$db->insert(数组);

//$db->insert(array('name'=>'姓名','sex'=>'男'));

//$db->insert(array('name'=>'姓名','sex'=>'男'), true); //第二个参数选填 如果为真值 则开启实体转义

//删除内容[返回影响行数]

//$db->delete(array('id>'=>'15'));

//$db->delete(array(3,4,5), true);  //第二个参数存在时,第一个参数为索引数组,批量删除多个

//$db->delete(array('1'=>1));   //删除所有数据

//更新内容[返回影响行数]

//$db->update(array('name'=>'姓名','sex'=>'男123'),array('id'=>'10'));

//$db->update(array('name'=>'姓名','sex'=>'aaa'),array('id'=>'10'),'1'); //第三个参数选填 如果存在,并为真值 则开启实体转义

//$db->update('click=click+1',array('id'=>"1"));       //第一个参数不是数组,类似于更新文章点击数的功能

//查询内容 select方式[返回二维数组]

//$result = $db->select();

//$result = $db->field('uname,id')->select();

//$result = $db->where(array('name'=>'%php%'))->select();  //like 查询

//$result = $db->join('`yzmcms_admin` ON yzmcms_admin.id=yzmcms_admintype.id')->where(array('id'=>'1'))->select();  //join 联合查询

//$result = $db->where("typeid in (1,2)")->select(); //SQL : select * from user where typeid in (1,2)

//$result = $db->where(array('name'=>'%php%'))->limit('0,5')->select(); //like 查询

//$result = $db->where(array('name'=>'%php%'))->limit('0,5')->order('id desc')->select(); //like 查询

//$result = $db->where(array('sex'=>'男'))->limit('0,5')->select();

//$result = $db->field('uname,id')->where(array('sex'=>'男'))->limit('0,3')->order('id desc')->select();

//$result = $db->field("sex ,count(sex),avg(height),sum(height) ")->group("sex")->having(" avg(height) >160")->select();

//$result = $db->field("sex ,count(sex) as '总个数',avg(height) as '平均身高',sum(height) as '总身高' ")->group('sex')->select();

//$result = $db->field("sex ,count(sex) as '总个数',avg(height) as '平均身高',sum(height) as '总身高' ")->group("sex")->having(" 平均身高 >160")->select();

//条件大于写法

//$res = $db->where(array('id > '=>21))->select();

//同理,不等于或者小于如下

//$res = $db->where(array('id != '=>21))->select();

//P($res);

//查询内容 find方式[返回一维数组]

//$result = $db->find();

//$result = $db->field('uname,id')->find();

//$result = $db->where("typeid in (1,2)")->find(); //SQL : select * from user where typeid in (1,2) limit 1

//$result = $db->field('id,name,height')->where(array('sex'=>'男'))->find();

//$result = $db->join('`yzmcms_admin` ON yzmcms_admin.id=yzmcms_admintype.id')->where(array('id'=>'1'))->find();  //join 联合查询

//$result = $db->field('uname,id')->where(array('sex'=>'男'))->order('id desc')->find();

//查询记录数[返回记录行数]

//$result = $db->total();

//$result = $db->where(array('age>'=>'12'))->total();

//$result = $db->join('`yzmcms_admin` ON yzmcms_admin.id=yzmcms_admintype.id')->where(array('age>'=>'12'))->total();

//自定义执行SQL语句 [yzmcms 代表表前缀]

//$db->query("select * from yzmcms_admin");

//获取一维数组,一条结果

//$db->fetch_array($db->query("select * from yzmcms_admin"));

//获取二维数组

//$db->fetch_all($db->query("select * from yzmcms_admin"));

//用于调试程序,输入最后一条SQL语句

//$db->lastsql();

YzmCMS 3.8版本新增的数据库操作// 新增 one 方法,用来查询某个字段的值 [返回值为字符串类型]

$res = D('admin')->field('rolename')->where(array('adminid'=>1))->one();

P($res);  //运行结果 string(15) "超级管理员"

$res = D('article')->field('userid')->where(array('id'=>1))->one();

P($res);  //运行结果 string(1) "1"

//新增 alias 别名方法,用于给表起别名

$admin = D('admin');

$res = $admin->alias('a')

->field('a.adminid,a.adminname,a.rolename,b.address,b.loginip,b.logintime')

->where(array('loginresult'=>1))

->join('yzmcms_admin_login_log b ON a.adminname=b.adminname', 'left')

->limit(5)

->select();

$admin->lastsql();

//最后生成的SQL为:

SELECT a.adminid,a.adminname,a.rolename,b.address,b.loginip,b.logintime FROM yzm_admin a LEFT JOIN yzm_admin_login_log b ON a.adminname=b.adminname WHERE loginresult=1 LIMIT 5

// 注意: join里的 “yzmcms_” 可表示任意的表前缀,无需修改

// 新增 事务处理

$affair = D('affair');

$affair->start_transaction();//开启事务

// 模拟业务流程,执行插入和更新操作

$res = $affair->insert(array('name'=>'袁志蒙','password'=>'test'));

$res2 = D('test')->update(array('name'=>'yzmcms','password'=>'123456'), array('id'=>1));

if($res && $res2){

$affair->commit();  //提交事务

}else{

$affair->rollback();  //事务回滚

}

YzmCMS 5.7版本新增的数据库操作// insert方法新增第4个参数:replace

// 语法:insert($data, $filter = false, $primary = true, $replace = false)

// $data         要增加的数据,参数为数组

// $filter       是否开启实体转义

// $primary   是否过滤主键

// $replace   是否为replace

// 返回值:  成功:返回自动增长的ID,失败:false

$data = array('title'=>'title', 'content'=>'content');

D('test')->insert($data, true);

// 新增批量插入方法:insert_all

// 语法:insert_all($data, $filter = false, $replace = false)

// $data         要增加的数据,参数为二维数组

// $filter       是否开启实体转义

// $replace  是否为replace

$data = array(

array('title'=>'title1', 'content'=>'content1'),

array('title'=>'title2', 'content'=>'content2'),

array('title'=>'title3', 'content'=>'content3'),

);

$res = D('test')->insert_all($data, true);

M方法

M是model的首字母,参数为一个model类名称,返回的是一个model类对象,意为加载并实例化本模块下的model类

U方法

U是URL的首字母,返回的是一个URL字符串,意为生成URL地址// 生成当前模块下的当前控制器的add方法URL地址

如:U('add');

// 生成当前模块下的test控制器的add方法URL地址

如:U('test/add') ;

// 生成admin模块下的test控制器的add方法URL地址

如:U('admin/test/add')

说明:U('模块名称/控制器名称/方法名称')

U方法可以有第二个参数,即可传参

如:U('admin/test/init',array('id'=>1,'status'=>1))和U('admin/test/init','id=1&status=1')是等效的

四、二次开发原则

YzmCMS作者开发时比较注重代码简洁、系统高效等特点,所以您在使用YzmCMS做二次开发中也应该遵循以下开发原则:

1.新增功能尽量不要修改系统原文件,建议以模块插件形式开发。

2.用户自定义全局函数写到“common/function/extention.func.php”文件中,不影响系统升级。

3.方法名称和变量名称都以小写字符命名。

4.类文件都以小写字符命名,并以.class.php后缀结尾。

5.所有方法尽可能写上注释等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MCMS铭飞cms建站系统完整开源!基于SpringBoot 2架构,前端基于vue、element ui。每月28定期更新版本,为开发者提供上百套免费模板,同时提供适用的插件(文章、商城、微信、论坛、会员、评论、支付、积分、工作流、任务调度等...),一套简单好用的开源系统、一整套优质的开源生态内容体系。铭飞的使命就是降低开发成本提高开发效率,提供全方位的企业级开发解决方案。 特点: 免费完整开源:基于MIT协议,源代码完全开源,无商业限制,MS开发团队承诺将MCMS内容系统永久完整开源; 标签化建站:不需要专业的后台开发技能,只要使用系统提供的标签,就能轻松建设网站; html静态化:系统支持全站静态化; 跨终端:站点同时支持PC与移动端访问,同时会自动根据访问的终端切换到对应的界面,数据由系统统一管理; 海量模版:铭飞通过MStore(MS商城)分享更多免费、精美的企业网站模版,降低建站成本; 丰富插件:为了让MCms适应更多的业务场景,在MStore用户可以下载对应的插件,如:站群插件、微信插件、商城插件等; 每月更新:铭飞团队承诺每月28日为系统升级日,分享更多好用等模版与插件; 文档丰富:为了让用户更快速的使用MCms系统进行开发,铭飞团队持续更新开发相关文档,如标签文档、使用文档、视频教程等; 开发环境: 建议开发者使用以下环境,这样避免版本带来的问题 Windows、Linux Eclipse、Idea Mysql≧5.7 JDK≧8 Tomcat≧8   MCMS铭飞cms建站系统 更新日志: v5.2.1 【框架】sprintboot版本更新到2.2.13.RELEASE 【新增】全局异常处理 【优化】搜索功能优化 【优化】标签脚本优化 【修复】修复MStore功能 【修复】具体参考开源中国ISSUES 5.2.0升级5.2.1步骤( 1、同步代码; 2、导入5.2.0-up-5.2.1.sql)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值