欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

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

程序员文章站 2022-04-24 15:22:35
...
目标:基于自定义的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数据库的操作类