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)则是可以显示的各种保留模式图形对象 ...
随机推荐
- [译]课程 1: 使用 Quartz
译者注: 原文在这 Lesson 1: Using Quartz 在你使用调度器之前, 你需要先实例化(能猜到是谁么?). 要实例化, 请使用 ISchedulerFactory 的实现. 译者注: ...
- adb shell 命令之----pm
常用的用法: 查看已经安装的包: pm list packages 查看已经安装的包以及apk路径(-3:只看第三方应用: -s:只看系统应用) -f: see their associated fi ...
- CMS GC启动参数优化配置
简介: java启动参数共分为三类: 其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容: 其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现 ...
- Machine Learning--week4 神经网络的基本概念
之前的学习成果并不能解决复杂的非线性问题 Neural Networks Sigmoid(logistic) activation function: activation function is a ...
- Learning-Python【14】:匿名函数与函数递归
一.什么是匿名函数 匿名函数就是没有名字的函数,又叫lambda表达式.用于一些简单的需要用函数去解决的问题,特点是只能在定义时使用一次,且函数体只有一行 匿名函数的定义就相当于只产生一个变量的值,而 ...
- CookieHelper
using System.Web: /// <summary> /// CookieHelper /// </summary> public static class Cook ...
- ugui 灰度shader mask冲突解决 转。。。
项目上遇到了一个问题,灰度shader无法在mask下使用,两个之间会一定的冲突.经查验是mask组件对shader的相关属性有要求,添加相关的属性则可符合要求使其他shader使用UGui里的mas ...
- Python语法注意点
1. 在Python中定义函数,可以用必选参数.默认参数.可变参数.关键字参数和命名关键字参数,这5种参数都可以组合使用.但是请注意,参数定义的顺序必须是:必选参数.默认参数.可变参数.命名关键字参数 ...
- Python自学:第三章 索引从0开始而不是从1
#返回最后一个,和倒数第二个元素 bicycles = ['trek','cannondale','redline','specialized'] print(bicycles[-1]) print( ...
- 使用 erlang OTP 模式编写非阻塞的 tcp 服务器(来自erlang wiki)
参考资料:http://erlangcentral.org/wiki/index.php/Building_a_Non-blocking_TCP_server_using_OTP_principles ...