从零开始之ecshop基础篇(17)

原创
2016-06-13 10:17:44 877浏览

目标:基于自定义的mvc框架开发的案例(项目)

典型的业务逻辑: 电子商务:商城(京东),B2C,C2C(淘宝),团购,秒杀,代购

内容管理:新浪门户类,优酷视频管理,博客文章管理,微博

论坛:

我们的需求,商品管理案例!参考ecshop应该出现的商品管理的基本功能实现。

ecshop,使用率非常高,电子商务平台(网上商城系统)。

上传拷贝php源代码 创建数据 基本配置

下载ecshop的源代码,解压,将upload目录拷贝(上传)到web目录:建议改成ecshop的名字

使用浏览器,访问到ecshop目录中的index.php即可。自动跳转到安装界面(如果需要重新安装,也可以请求到该地址)

检查环境,典型的需要:mysql扩展,gd扩展(图片处理扩展)

配置信息

数据库服务器部分:

管理员信息:

安装测试数据:

等待安装完毕:

Tips:建议选择PHP5.3X版本

数据结构的设计

编码的设计

典型的编码,分成两大方向:二次开发,基于框架开发

二次开发:在已有的产品(业务逻辑都已经实现)上做修改,升级的开发方式。

优点:速度快,通用业务逻辑已经被实现。

缺点:定制型差。

典型的产品:

电子商务:ecshop,ecmall,shopex,zen-cart,oscommerce ,麦进斗

内容管理:dedecms,帝国cms,phpcms,drupal,wordpress

论坛:phpwind,discuz

框架开发:

框架,没有实现业务逻辑,只实现了底层代码。

优点:不用写重复的底层功能代码,直接用即可,定制性强。

缺点:周期较长。

典型的框架:ThinkPHP,Yii,Ci,Zend-framework,symphony

PHP代码与HTML代码 出现在同一文件中。

典型的是:

上面是PHP先实现所有的业务逻辑,下边再是HTML决定显示样式。

或者直接利用PHP echo ,输出需要的HTML代码。

2
3
4
5
6
7
8
9
' ' '' ' '}
'

将负责数据处理,业务逻辑处理的PHP代码,与负责显示效果处理的HTML(CSS,JS)等分开来进行管理。

典型的实现:将负责显示的HTML相关部分,拆分到独立的HTML中,在PHP处理完业务逻辑后,再将HTML代码加载到该文件中。

简单的说就是把原来混编的代码分开到2个页面。这2个页面要组合起来才能实现和原来一个混编文件一样的效果。

比如:match_list.html(展示)match_list.php(逻辑) require './match_list.html';

template:参见match_list.html

使用html相关代码负责显示结构,使用动态代码php实现数据的展示,该类型的文件,在项目中,称之为模板文件,template.

要求:浏览器用户请求,必须请求负责逻辑功能的PHP文件才可以。

如何限制浏览器用户不能请求到html模板文件?

典型的实现方式2种:

2

2
3
4
5

2
Deny from All

2
3
4
5
6
7
8
9
10

//

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

} $rows = $db->fetchAll($sql);
}

2
3
4
5
6
7
8
9
10
11
12
13
14





"

"





2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
* */
*
*
* @return array
*/ fetchAll($sql);
}
}

2
3
4
5
6
7
8
9
10
11
12
13
//
//$model_match = new MatchModel;
$rows = $model_match->getList();

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16





"

"


"



2
3
4
5
6
7
8
9
10
11
12
$model_match = new MatchModel;
$model_match->delById(

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
* *
* @param $match_id
*
* @return bool
*/

query($sql);
}

2
3
4
5
6
7
* */
}

2
3
4
5
6
7
8
9
* */
}

2
3
4
5
6
7
8
9
}
}

2
3
4
5
6
7
8
9
10
11
12
13
14
initDB();
}
db = new MySQLDB( }
}

db即可操作到当前mysqlDB类对象。

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
* *
* @param $match_id
*
* @return bool
*/

db->query($sql);db

2
3
4
5
6
7
8
9
10
11


"

"





Controller,控制器

2
3
4
5
6
7
8
9
//

2

2
3
4
5
'} '}

在相应的部分执行正确的控制器代码即可:

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
';
$model_match = new MatchModel;
$rows = $model_match->getList();
}
';
$model_match = new MatchModel;
$model_match->delById(
}

2
3
4
5
6
"

//

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
* */ * */ }

*
*/ }
}

2
3
4
5
6
7
8
9
10
11
//$action = $a.//$action();

2
3
4
5
6

}
}

2
3
4
5
6
7
8
9
10
11
12
$model_student = new StudentModel;
getList();
}
}

2
3
4
5
6
7
db->fetchAll( }
}

2
3
4
5
6





2
3
4
5
6

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
////////$action_name();

测试:localhost/six/index.php?c=Student&a=list localhost/six/index.php?c=Match&a=list

2
3
"

header(

强调:

有了单一入口,就要求,用户的所有的请求都要从单一入口文件请求到。

目录分成2个目录

体现框架代码和业务逻辑代码的区别

将基础模型,mysqlDB类定义文件放在框架代码:

将业务逻辑相应的控制器,模型,视图文件分别放在application目录中

入口文件,通常放置在站点根目录:

修改项目中使用的路径

2
3
4
5
6
7
8
9
/index.php 入口文件
/application 应用程序目录
/model 模型类目录
/view 视图类目录
/controller 控制器类目录
/framework 框架代码目录
/Model. /MySQLDB.class.php mysql数据库的操作类
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
上一条:Memoization in PHP 下一条:PHP自动发邮件