栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP

Yii 2.0开发一个仿京东商城平台

PHP 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Yii 2.0开发一个仿京东商城平台

学习知识点:

关于yii的几个小功能点:
  • Layout组件
  • 模板引擎
  • ActiveForm表单组建
  • Validation验证组建
  • attributeLabels()和rules()
  • validate函数的建立
  • Url地址生成组建
  • Html标签生成组建
  • Pagination分页组建
商城的几个大模块如下:

然后我们再看一下使用的技术栈:nginx+PHP5.4版本以上+yiifromework+vim+composer(框架和扩展组件的开发)
对于php的配置是否全部正确开启,我们可以通过php requirements.php来环境监测


遇到的一个小问题,phpStudy 安装 composer
Could not open input file: C:WindowsSystem32composer.phar
解决:https://segmentfault.com/q/1010000000458019
php composer.phar create-project --prefer-dist yiisoft/yii2-app-basic basic

###请求生命周期

###无限级分类的实现

无限级分类可以说是一个比较重要的小知识点了,这个方法因为首页和后台都要使用,所有抽离出来,放在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;
    }

    
    public function getData()
    {
 $cates = self::find()->all();
 $cates = ArrayHelper::toArray($cates);
 return $cates;
    }

    
    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;
    }

    
    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

开启后台模块
config->web.php
$config['modules']['admin'] = ['class' => 'appmodulesadmin'];
public $defaultRoute = 'site';

添加配置/config/web.php

    'defaultRoute' => 'index',

##后台登录模块

邮件类使用时的报错
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
创建相对路径:yiihelpersUrl::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]);
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/227386.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号