仿京东商城php视频,Yii 2.0开发一个仿京东商城平台

学习知识点:

AAffA0nNPuCLAAAAAElFTkSuQmCC

关于yii的几个小功能点:

Layout组件

模板引擎

ActiveForm表单组建

Validation验证组建

attributeLabels()和rules()

validate函数的建立

Url地址生成组建

Html标签生成组建

Pagination分页组建

商城的几个大模块如下:

AAffA0nNPuCLAAAAAElFTkSuQmCC

AAffA0nNPuCLAAAAAElFTkSuQmCC

AAffA0nNPuCLAAAAAElFTkSuQmCC

AAffA0nNPuCLAAAAAElFTkSuQmCC

AAffA0nNPuCLAAAAAElFTkSuQmCC

然后我们再看一下使用的技术栈:nginx+PHP5.4版本以上+yiifromework+vim+composer(框架和扩展组件的开发)

对于php的配置是否全部正确开启,我们可以通过php requirements.php来环境监测

遇到的一个小问题,phpStudy 安装 composer

Could not open input file: C:\Windows\System32\composer.phar

解决:https://segmentfault.com/q/1010000000458019

php composer.phar create-project --prefer-dist yiisoft/yii2-app-basic basic

###请求生命周期

AAffA0nNPuCLAAAAAElFTkSuQmCC

###无限级分类的实现

AAffA0nNPuCLAAAAAElFTkSuQmCC

无限级分类可以说是一个比较重要的小知识点了,这个方法因为首页和后台都要使用,所有抽离出来,放在CommonController中方便调用。

分类模块代码如下

class Category extends ActiveRecord

{

public static function tableName()

{

return "{{%category}}";

}

public function attributeLabels()

{

return [

'parentid' => '上级分类',

'title' => '分类名称'

];

}

public function rules()

{

return [

['parentid', 'required', 'message' => '上级分类不能为空'],

['title', 'required', 'message' => '标题名称不能为空'],

['createtime', 'safe']

];

}

public function add($data)

{

$data['Category']['createtime'] = time();

if ($this->load($data) && $this->save()) {

return true;

}

return false;

}

/**

* 获取分类表所有数据

* @return array|ActiveRecord[]

*/

public function getData()

{

$cates = self::find()->all();

$cates = ArrayHelper::toArray($cates);

return $cates;

}

/**

* 将无序数据遍历排列成序(子孙树)

* @param $cates

* @param int $pid

* @return array

*/

public function getTree($cates, $pid = 0)

{

$tree = [];

foreach($cates as $cate) {

if ($cate['parentid'] == $pid) {

// 拿出顶级分类

$tree[] = $cate;

// 拿出子分类

$tree = array_merge($tree, $this->getTree($cates, $cate['cateid']));

}

}

return $tree;

}

/**

* 添加前缀,区分层级

* 找到对应级别,加相应个数

* @param $data

* @param string $p

* @return array

*/

public function setPrefix($data, $p = "|-----")

{

$tree = [];

$num = 1;

// parentid为零的,一个前缀

$prefix = [0 => 1];

while($val = current($data)) {

$key = key($data);

// 跳过parentid-0,第二次遍历

if ($key > 0) {

// 寻找上一个元素和该元素parentid不一样的位置,也就是说子层级出现的位置

if ($data[$key - 1]['parentid'] != $val['parentid']) {

// 层级加一

$num ++;

}

}

// 首先执行这里

if (array_key_exists($val['parentid'], $prefix)) {

$num = $prefix[$val['parentid']];

}

$val['title'] = str_repeat($p, $num).$val['title'];

$prefix[$val['parentid']] = $num;

$tree[] = $val;

// 指针下移

next($data);

}

return $tree;

}

public function getOptions()

{

$data = $this->getData();

$tree = $this->getTree($data);

$tree = $this->setPrefix($tree);

$options = ['添加顶级分类'];

foreach($tree as $cate) {

$options[$cate['cateid']] = $cate['title'];

}

return $options;

}

public function getTreeList()

{

$data = $this->getData();

$tree = $this->getTree($data);

return $tree = $this->setPrefix($tree);

}

public static function getMenu()

{

$top = self::find()->where('parentid = :pid', [":pid" => 0])->limit(11)->orderby('createtime asc')->asArray()->all();

$data = [];

foreach((array)$top as $k=>$cate) {

$cate['children'] = self::find()->where("parentid = :pid", [":pid" => $cate['cateid']])->limit(10)->asArray()->all();

$data[$k] = $cate;

}

return $data;

}

}

###前台页面搭建(后台页面)

去掉页眉页脚,也就是上层共用部分和下层的公共部分。然后提取出来,放在一个单独的php文件中,当模板使用。

layout.php模板格式:

`模板内容

模板内容`

在控制器中控制模板,如下:

取消模板的使用;

public $layout = false;或者$this->layout = 'false' ;

调用模板

$this->layout= '模板名称'

###gii的使用

在配置文件( config->web.php->gii)开启gii

创建新Module

AAffA0nNPuCLAAAAAElFTkSuQmCC

开启后台模块

config->web.php

$config['modules']['admin'] = ['class' => 'app\modules\admin'];

public $defaultRoute = 'site';

添加配置/config/web.php

'defaultRoute' => 'index',

##后台登录模块

AAffA0nNPuCLAAAAAElFTkSuQmCC

邮件类使用时的报错

Expected response code 250 but got code "553", with message "553 Mail from must equal authorized user

原因如下:

1.缺少提交的setFrom(‘用户名@163.com’);

2.配置文件中的From和username不一致问题;

3.邮箱未开启stmp服务;

小知识点

当我们在使用邮箱模板时的确认url时,我们使用创建绝对路径的方式

创建绝对路径:Yii::$app->urlManager->createAbsoluteUrl

创建相对路径:yii\helpers\Url::to()

###后台管理员模块

这个模块需要实现的功能有管理员列表(分页),管理员删除,当前登陆管理员修改信息,注册会员(后台直接添加)

分页的实现

public function actionManagers()

{

$this->layout = "layout1";

$model = Admin::find();

// 分页处理

$count = $model->count();

$pageSize = Yii::$app->params['pageSize']['manage'];

$pager = new Pagination(['totalCount' => $count, 'pageSize' => $pageSize]);

$managers = $model->offset($pager->offset)->limit($pager->limit)->all();

return $this->render("managers", ['managers' => $managers, 'pager' => $pager]);

}

管理员删除

public function actionDel()

{

$adminid = (int)Yii::$app->request->get("adminid");

if (empty($adminid) || $adminid == 1) {

$this->redirect(['manage/managers']);

return false;

}

$model = new Admin;

if ($model->deleteAll('adminid = :id', [':id' => $adminid])) {

Yii::$app->session->setFlash('info', '删除成功');

$this->redirect(['manage/managers']);

}

}

添加管理员

public function actionReg()

{

$this->layout = 'layout1';

$model = new Admin;

if (Yii::$app->request->isPost) {

$post = Yii::$app->request->post();

if ($model->reg($post)) {

Yii::$app->session->setFlash('info', '添加成功');

} else {

Yii::$app->session->setFlash('info', '添加失败');

}

}

$model->adminpass = '';

$model->repass = '';

return $this->render('reg', ['model' => $model]);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值