ecmall 学习记录
1.
/* 载入配置项 */
$setting =& af(MODULE);
Conf::load($setting->getAll());
af方法定义如下:
/**
* 获取数组文件对象
*
* @author Garbin
* @param string $type
* @param array $params
* @return void
*/
function &af($type, $params = array())
{
static $types = array();
if (!isset($types[$type]))
{
/* 加载数据文件基础类 */
include_once(ROOT_PATH . '/includes/arrayfile.base.php');
include(ROOT_PATH . '/includes/arrayfiles/' . $type . '.arrayfile.php');
$class_name = ucfirst($type) . 'Arrayfile';
$types[$type] = new $class_name($params);
} return $types[$type];
}
其实就是加载了两个文件,然后返回了一个实例化的对象,上面载入配置项 af 传参的MODULE是指当前模块的名字,
关于af方法 注释说是没有返回值,但是下面return的是一个对象,af里引入了两个类文件,其实,实例化的就是basearrayfile这个对象,因为引入的类文件里继承的这个basearrayfile对象,然后调用里面的方法获取配置信息,至于什么时候要获取配置信息,就要看项目需求了,比如,会员年费有可能是100,也有可能是200,这个时候不能在程序里写死,所以要在配置文件里配置,这样要改的话就改配置文件,就不用改程序代码了,通过查询配置文件,就可以得到修改后的价格。 配置文件在data目录下名为XXX..inc.php.
m 实例化模型对象,这个是最常用的 也就相当于TP框架里的直接实例化一张表,可以对表的内容进行增删查改。
bm 实例化的是业务对象,也就是继承自模型对象(m方法实例化的),不过逻辑相对复杂,就抽象出来行成业务对象,进行业务逻辑处理,也会有增删改查,业务多的时候需要逻辑分层,这个时候用bm,(可以参考线上商城的goods.model.php)我还是不太懂,大腿毕竟是大腿,等过几年接触的东西多了,业务实现的多了,说不定我就懂了......此处应该有表情,可是这个编辑器没有,我能怎么办呢,我也很无奈。
2017.6.9
关于ecmall的模块开发
什么时候用到模块开发? 一个新的项目需求,需要分析,经常用的是直接写控制器 也就是在项目文件夹下的app里写前台控制器,在admin/app里写后台控制器。
开发过程中,常用的就是直接在app目录下写控制器,适用于简单的需求,可快速开发,扩展性较差,相应的功能在后台需要添加相应的菜单。
开发模块适用于较大,较为复杂的项目需求,模块的扩展性较好,模块开发也要写前后台模块,后台扩展里可以进行模块的管理。
关于模块开发和直接写控制器,在逻辑上,业务上没有区别,只是不同的做法而已,module比较容易扩展,app比较容易开发。
模块访问就是 index.php?module=XX&act=XXX
直接写控制器的访问就是 index.php?app=XX&act=XXX
关于ecmall的模版
前台模版是在项目目录下的themes 里面分为mall 和store 。mall 是商城模版,store是店铺模版。至于控制器引入上传模版还是店铺模版就看继承的父类了,继承mallbase的就引入mall,继承storebase就引入store。
2017.6.12
ecmall 学习记录的更多相关文章
- ecmall 学习记录3
1.在ecmall.php 中 336行有一个函数 function lang_file($file) { return ROOT_PATH . '/languages/' . LANG . '/' ...
- ecmall 学习记录2
1.ecmall 自带的写入日志方法:do_log4php("函数名","类名",$param); $param是参数 在类里调用写入之日的方法 需要先加载 ...
- Quartz 学习记录1
原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...
- Java 静态内部类与非静态内部类 学习记录.
目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...
- Apache Shiro 学习记录4
今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...
- UWP学习记录12-应用到应用的通信
UWP学习记录12-应用到应用的通信 1.应用间通信 “共享”合约是用户可以在应用之间快速交换数据的一种方式. 例如,用户可能希望使用社交网络应用与其好友共享网页,或者将链接保存在笔记应用中以供日后参 ...
- UWP学习记录11-设计和UI
UWP学习记录11-设计和UI 1.输入和设备 通用 Windows 平台 (UWP) 中的用户交互组合了输入和输出源(例如鼠标.键盘.笔.触摸.触摸板.语音.Cortana.控制器.手势.注视等)以 ...
- UWP学习记录10-设计和UI之控件和模式7
UWP学习记录10-设计和UI之控件和模式7 1.导航控件 Hub,中心控件,利用它你可以将应用内容整理到不同但又相关的区域或类别中. 中心的各个区域可按首选顺序遍历,并且可用作更具体体验的起始点. ...
- UWP学习记录9-设计和UI之控件和模式6
UWP学习记录9-设计和UI之控件和模式6 1.图形和墨迹 InkCanvas是接收和显示墨迹笔划的控件,是新增的比较复杂的控件,这里先不深入. 而形状(Shape)则是可以显示的各种保留模式图形对象 ...
随机推荐
- Flutter 控件之 Routes 和 Navigator. [PopupRoute]
一个 App 通常会有多个界面,每个界面实现不同的功能,并在多个界面之间跳转.在 Flutter 中多个界面的跳转是通过 Navigator 来实现的. 在 Flutter 中定义了一个 Overla ...
- TCP之种种连接异常
1. connect出错: (1) 若TCP客户端没有收到syn分节的响应,则返回ETIMEOUT错误:调用connect函数时,内核发送一个syn,若无响应则等待6s后再发送一个,若仍然无响应则等待 ...
- 关于Could not read pom.xml和No plugin found for prefix 'tomcate7' in the current project
当时出现的错误: 有大神知道我这个错误怎么解决吗[ERROR] No plugin found for prefix 'tomcate7' in the current project and in ...
- .NET ActiveMQ类库
ActiveMQ .NET类库 ActiveMQ是一种开源的,实现了JMS规范的,面向消息(MOM)的中间件,为应用程序提供高效的.可扩展的.稳定的和安全的企业级消息通信. 0. 准备 使用Nuget ...
- centos6.5换yum源
centos换yum源要借助wget,要先安装wget 输入yum -y install wget命令以安装wget 若安装wget失败或卡死, ctrl+z,ps -ef | grep yum,之后 ...
- Learning-Python【17】:包的导入使用
在同一级目录下新建 p1.py 和 run.py,添加代码 # p1.py 模块的设计者 def f1(): print("from f1") def f2(): print(&q ...
- C++ 将 std::string 转换为 char*
参考: std::string to char* C++ 将 std::string 转换为 char* 目前没有直接进行转换的方法.必须通过string对象的c_str()方法,获取C-style的 ...
- 虚拟现实外包公司—VR游戏你不知道的以及你该知道的WebVR
VR基础——原理其实很简单 我们地球人之所以能够看到立体的景物,是因为双眼可以各自独立看东西,也就是左眼只能看到左眼的景物,而右眼只能看到右眼的景物.因为人类左右两眼有间距,造成两眼的视角有些细微的差 ...
- python requests 上传文件
token="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjoiZWM2ZWFjZjFjM2UzYzEyOWU3ODA4YjgwNzkxNGI ...
- 重建索引报错-python数据分析
obj3 = pd.Series([']) obj3.reindex(range(), method='ffill') 此时会爆出一大堆错误. 出错原因是:之前 obj3 的索引是字符串类型,重新索引 ...