暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PHP项目案例开发 | 电子商务系统:后台功能模块设计

678

电子商务源于英文Electronic Commerce,简称EC,是利用简单、快捷、低成本的电子通信方式,在互联网上开展的各种商贸活动。

近年来,随着信息技术的不断发展,电子商务已关系到经济结构、产业升级和国家整体经济竞争力,利用电子商务平台出售或购买商品,更是在日常生活中随处可见。

本系列文章介绍一个简单的电子商务系统项目开发过程,帮助进一步熟悉PHP Web应用开发的框架技术。


在Web应用项目中,由于数据表之间的相互关联,常常不能或不方便使用数据库管理工具直接向数据表中插入测试数据,需要通过代码来完成相应的操作。所以,在通常情况下,Web应用项目的开发都是从后台管理系统功能模块的开发开始的。

由于本教材是PHP Web项目开发学习用基础教程,并且为读者提供了完整的数据库测试数据,所以,本案例项目的开发从前台模块的功能实现开始。

前台模块内容请查看上一篇内容。


1

后台功能模块设计


系统后台功能的实现与前台基本相似,下面以后台首页和商品信息管理模块为例,简单介绍系统后台功能的实现方法。


1

后台首页设计

后台首页承载并显示系统后台所包含的功能模块,使管理员能够清楚其管理权限。根据本项目的需求分析,确定系统后台应包括下面4个功能模块。

(1) 商品信息管理模块。该模块主要包括商品信息的添加、修改、删除和商品类别的添加等功能。

(2) 用户信息管理模块。该模块主要包括查询和显示用户注册信息、冻结用户、用户留言管理、更改管理员密码等功能。

(3) 订单信息管理模块。该模块主要包括查看所有用户提交的订单信息,并根据执行阶段对订单进行标记处理、删除订单和查询订单等功能。

(4) 公告信息管理模块。该模块主要包括系统公告信息的添加、修改、删除和用户评论信息的查看和删除等功能。

这些功能模块在后台主页界面中的链接如图9.5所示。下面简单介绍模块功能的实现。

■ 图9.5 系统后台首页


1. 控制器设计

在项目的application\controller目录中新建admin文件夹,并在该文件夹中创建Main控制器,代码如下。

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
 * 后台首页控制器
 * @author weiwenping
*/

class Main extends WM_Controller
{
    public function __construct()
    
{
        parent::__construct();
    }
}


该控制器继承于自定义的控制器基类WM_Controller。在Main控制器中添加index()方法,代码如下。

public function index() {
//主内容区显示订单信息
$pagesize = 6; //每页显示的信息条数
$current = isset($_GET['page']) ? (int)$_GET['page'] : 1; //当前页
// 加载订单表模型
$this->load->model('order');
// 获取记录总条数
$total = $this->order->getNums();
// 获取当前页记录
$data['orders'] = $this->order->getDataLimit($pagesize, ($current-1)*$pagesize);
// 生成分页链接
$this->load->library('page',array('total'=>$total,'pagesize'=>$pagesize,'current'=>$current));
$data['links'] = $this->page->showPage();
// 主内容区标题
$data['content_title'] = '用户订单信息管理';
// 加载视图
$this->load->view('admin/main/index', $data);
}


对于电子商务系统的后台管理者,用户订单信息的管理是最重要的。所以,本项目的后台首页上显示的是“用户订单信息”,如图9.5所示。

在上述index()方法代码中,使用了模型类Order中的一些方法,来获取用户订单信息数据。下面创建Order模型类,并编写方法。

2. 模型设计

在项目的application\models目录中新建Order模型类,该类对应于项目的订单数据表wm_order,代码如下。

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
 * wm_order表模型
 * @author weiwenping
*/

class Order extends WM_Model
{
    public function __construct() {
        $this->table = 'order'; // 设置数据表
        parent::__construct();
    }
}


从上述代码中可以看出,该类继承于自定义模型基类WM_Model。我们在Main控制器的index()方法中使用的模型方法getNums()和getDataLimit()均继承于该模型基类。两个方法的代码如下。

/**
* 获取数据表记录总条数
* @return array
*/

public function getNums() {
return $this->db->count_all($this->table);;
}
/**
* 获取一定数量的记录
* @param int $n
* @return array
*/

public function getDataLimit($n, $offset=0){
$res = $this->db->limit($n, $offset)->get($this->table);
return $res->result_array();
}


3. 视图设计

在项目的application\views目录中新建admin\main文件夹,并编写视图文件index.php代码。详情请参见源码。

视图中的翻页功能由自定义类Page的实例化对象来实现,该类代码比较简单,请参见源码。关于自定义类的加载和使用方法,已在 9.2.4节 中做了介绍,这里不再赘述。

4. 辅助函数设计

在如图9.5所示的页面中,其头部的中间区域显示了当前的日期和时间信息,其中的“星期”显示使用了自定义的辅助函数week2zh(),将数字的星期转换为大写的中文,以符合人们日常阅读习惯。

视图中的日期显示代码如下。

<ul class="layui-nav layui-layout-left">
<li class="layui-nav-item">&nbsp;&nbsp;&nbsp;&nbsp;今天是:&nbsp;<?php echo date(' Y 年 m 月 d 日') ?></li>
<li class="layui-nav-item">&nbsp;&nbsp;&nbsp;&nbsp;星期 <?php echo week2zh(date('w')); ?></li>
<li class="layui-nav-item">&nbsp;&nbsp;&nbsp;&nbsp;现在时间: <?php echo date('H : i : s'); ?></li>
</ul>


辅助函数week2zh()代码如下。

/**
 * 将小写的星期数字转换成中文大写数字
 * @param string $param
 */

function week2zh($week) {
    $arr = array('日','一','二','三','四','五','六');
    return $arr[$week];
}


另外,为了保证项目的数据安全,后台管理系统的所有资源不允许未登录用户访问。在Main控制器的构造方法中添加访问控制的代码。

// 判断用户是否登录,若未登录则跳转到管理员登录页面
if (!$this->session->userdata('logged_in')){
    redirect('admin/login_admin');
    exit();
}


代码中的logged_in参数为用户的登录信息。这里使用了CI框架的session库,需要在系统的自动加载配置文件autoload.php中进行配置。

$autoload['libraries'] = array('database', 'session');


2

商品信息管理

商品信息管理,一般包括商品信息的增、删、改、查等相关操作。

1. 商品信息的显示

商品信息的显示与上述系统后台首页中订单的显示相似,只不过此时操作的是商品信息表wm_goods中的数据。页面效果如图9.20所示。


■ 图9.20商品信息显示页面


商品信息管理功能由控制器admin\goods_admin实现,模型为Goods,视图文件夹为views\admin\goods。

如图9.20所示页面由左侧菜单“商品管理”|“修改商品”激活,该菜单调用goods_admin控制器的index方法。详细代码请参见源码。

图9.20展示的是全部商品信息列表,单击页面中的“详情”按钮,则显示商品的详细信息,如图9.21所示。


■ 图9.21商品信息详情页面


商品信息详情的输出由admin\goods_admin控制器的detail()方法实现,代码如下。

public function detail(){
// 获取商品ID
$id = (int)$this->input->get('id',true);
// 获取商品详情
$this->load->model('goods');
$goods = $this->goods->getDataByID($id);

$this->load->vars('goods', $goods);

$this->load->vars('content_title', '商品信息详情');
$this->load->view('admin/goods/detail');
}


在上述代码中,模型方法getDataByID根据商品ID获取信息。该方法在模型基类WM_Model中定义,代码如下。

/**
* 根据商品ID查询
* @param unknown $id
* @return array
*/

public function getDataByID($id) {
$res = $this->db->where('id', $id)->get($this->table);
return $res->result_array();
}


商品信息详情的视图页面代码比较简单,请参见源码。

2. 商品信息的添加

商品信息的添加执行的是数据表中数据的插入操作,也就是数据库的写入操作。要完成这个功能,需要接收用户通过表单或文件输入的商品信息数据,并对数据进行验证后,交给模型方法来实现。

在控制器admin\goods_admin中新建goods_form()方法,实现商品信息表单的显示,代码如下。

/**
* 商品信息表单,用于商品信息的添加与编辑
*/

public function goods_form() {
// 加载自定义助手函数
$this->load->helper('functions');
// 获取商品类型
$this->load->model('category');
$data['category'] = $this->category->getAll();
// 接收商品ID
$id = $this->input->get('id',true);
// 判断是“添加表单”还是“编辑表单”
if (NULL === $id){
    $btn_submit = '添加';
}else{
    $btn_submit = '编辑';
}
// 加载表单视图
$data['btn_submit'] = $btn_submit;
$this->load->view('admin/goods/goods_form', $data);
}


由于商品的“商品类型”和“商品等级”数据使用select表单元素,所以,在表单打开时需要初始化它们的值。这些初始值来自数据表wm_category,使用category模型的getAll()方法来获取。页面效果如图9.22所示。


■ 图9.22初始化表单中的select表单元素


另外,页面中的“商品等级”也是采用了select表单元素,但由于它的初始值种类比较少,这里采用数组来初始化它。

定义助手函数htmlGradeOption(),使用该函数来生成“商品等级”选择框中的内容,代码如下。

/**
 * 创建“商品等级”表单初始值
 * @param unknown $selected_item
 * @return string
 */

function htmlGradeOption( &$selected_item) {

    // 商品等级
    $greads = array('未分级', '普通', '精品', '二手', '过时');
    $html = '';
    foreach ($greads as $value) {
        $html .= '<option value=" ';
        $html .= $value;
        $html .= '" ';
        if (isset($selected_item) && $value == $selected_item) {
            $html .= ' selected ';
        }
        $html .= ' > ';
        $html .= $value;
        $html .= '</option>';
    }

    return $html;
}


调用该函数需要传入一个参数,该参数在表单“编辑”功能时使用。它根据商品的等级来初始化选择,如图9.23所示。


■ 图9.23编辑时初始化表单中的“商品等级”值


在控制器admin\goods_admin的goods_form()方法中,接收商品ID数据使用了CI框架的CI_INPUT类的get()方法,该方法获取GET请求数据。

下面的语句:

$id = $this->input->get('id',true);


表示获取以GET方式传递的参数id的值,第二个参数true表示启动XSS过滤功能。

由于商品的添加和编辑共用同一个表单,所以,在加载商品表单时需要判断当前的操作类型。这里使用URL中是否带有id参数来进行区分。

准备好表单以后,就可以实现商品信息的添加与修改功能了。下面先来实现商品信息的添加功能,首先在控制器admin\goods_admin中添加add()方法,其代码如下。

/**
* 商品的添加
*/

public function add() {
// 接收表单数据
$data['goods'] = $this->input->post(null, true);
//$data['goods']['tupian'] = $_FILES['tupian'];
// 加载表单验证类
$this->load->library('form_validation');
// 加载form助手函数
$this->load->helper('form');
// 设置表单数据规则
$rules = array(
    array('mingcheng','商品名称','required|min_length[3]'),
    array('addtime','上市时间','required'),
    array('shichangjia','市场价格','required|numeric'),
    array('huiyuanjia','会员价格','required|numeric'),
    array('typeid','商品类型','required'),
);
foreach ($rules as $r) {
    $this->form_validation->set_rules($r[0],$r[1],$r[2]);
}

if ( true == $this->form_validation->run()) {
    // 获取上传图片的文件名
    $tupian = 'public/upload/goods/'.time().'.jpg';
    $data['goods']['tupian'] = $tupian;
    move_uploaded_file($_FILES['tupian']['tmp_name'], $tupian);
    // 数据插入
    $this->load->model('goods');
    $this->goods->add($data['goods']);

    redirect('admin/goods_admin');
    exit;
}else{
    $data['btn_submit'] = '添加';
    // 获取商品类型
    $this->load->model('category');
    $data['category'] = $this->category->getAll();

    $this->load->view('admin/goods/goods_form', $data);
}

}


从上述代码可以看出,商品信息的添加总体上分为三个步骤,即表单数据的接收、表单数据的验证和数据的保存。

数据安全是Web项目开发中的一个重要环节,上述代码中采用了CI框架的CI_Form_Validate对象方法来实现表单数据的后端验证。使用该类时需要加载CI框架的form_validate库,最好同时加载form助手函数。

上述代码和视图文件中相关方法的使用,以及数据验证规则,请参考CI框架的使用手册,由于篇幅的限制这里不再详述。图9.24展示了表单数据后端验证的页面效果。


■ 图9.24表单数据的后端验证页面效果


从图中可以看出,“商品名称”文本框中的数据不符合验证规则,这里字符长度最小为3。页面中的验证错误信息为英文,可以下载中文语言包并进行相关设置即可将其汉化。

3. 商品信息的修改

商品信息的修改由控制器admin\goods_admin中的edit()方法来实现,代码如下。

/**
public function edit(){

echo 'goods_admin/edit';
}


上述代码与商品添加的add()方法代码相似,只是使用的模型方法稍有不同而已。由于商品信息的添加与编辑共用同一个表单,所以需要区分不同操作时表单的action属性值。

这里使用页面中的btn_submit参数来判断当前操作类型,也就是根据当前表单的“提交”按钮文本来进行区分。下面是自定义的助手函数。

/**
 * 添加与编辑表单action
 * @param unknown $btn_submit
 * @return string
 */

function setFormAction($btn_submit) {
    $action = '';
    if ($btn_submit == '添加') {
        $action = site_url('admin/goods_admin/add');
    }elseif ($btn_submit == '编辑'){
        $action = site_url('admin/goods_admin/edit');
    }
    return $action;
}


视图中的代码:

<form class="layui-form" action="<?php echo setFormAction($btn_submit); ?>" enctype="multipart/form-data" method="post">


为了在编辑表单中显示当前商品的“类型”和“等级”,我们使用了两个自定义助手函数,代码如下。

/**
 * 创建“商品类型”表单初始值
 * @param unknown $selected_item
 * @return string
 */

function htmlCategoryOption(&$category, &$goods) {
    
    $html = '';
    foreach ($category as $v) {
        $html .= '<option value=" ';
        $html .= $v['id'];
        $html .= '" ';
        if (isset($goods) && $goods['typeid'] == $v['id']) {
            $html .= ' selected ';
        }
        $html .= ' > ';
        $html .= $v['typename'];
        $html .= '</option>';
    }
    
    return $html;
}
/**
 * 创建“商品等级”表单初始值
 * @param unknown $selected_item
 * @return string
 */

function htmlGradeOption(&$goods, $v) {
    
    // 商品等级
    $greads = array('未分级', '普通', '精品', '二手', '过时');
    $html = '';
    foreach ($greads as $value) {
        $html .= '<option value=" ';
        $html .= $value;
        $html .= '" ';
        if (isset($goods) && $value == $v) {
            $html .= ' selected ';
        }
        $html .= ' > ';
        $html .= $value;
        $html .= '</option>';
    }

    return $html;
}


上述函数能够完成添加操作时select表单元素的初始化,添加操作数据验证出现错误后返回表单页面时select的赋值,以及编辑时的相似操作。

4. 商品信息的删除

商品的删除通过控制器admin\goods_admin中的delete()方法来实现,代码如下。

/**
public function delete() {
// 接收商品ID
$id = (int)$this->input->get('id',true);
// 加载模型
$this->load->model('goods');
// 删除商品
$res = $this->goods->delete($id);
if ($res) {
    redirect('admin/goods');
    exit;
}else{
    $this->load->view('errors/html/error_db');
    exit;
}

}


代码中的模型方法delete()在类WM_Model中定义,代码如下。

/**
* 数据的删除
* @param unknown $data
*/

public function delete($id) {

return $this->db->where('id', $id)->delete($this->table);
}


注意: 数据的删除操作一定要设置条件语句。

5. 商品类别管理

商品的类别管理由控制器admin\category_admin来实现,使用的模型为category,视图文件存放在项目views\admin\category子目录中。

商品类别管理功能的实现与商品信息管理基本相同,由于篇幅限制,这里不再赘述。



项目实战

PHP项目案例开发

精彩回顾

电子商务系统

电子商务系统:前台功能模块设计




2

参考书籍


《PHP项目案例开发从入门到实战-微课视频版》

ISBN:9787302570974

作者:马石安、魏文平

定价:79.8元

扫码优惠购书


内容简介

本书是为学习PHP程序设计编写的一部实践性教材,详细讲解了PHP项目开发的方法及关键技术。

全书共10章,分为“开发准备”和“项目案例”两篇。第一篇包括第1~4章,介绍了PHP项目开发前的一些准备知识,包括开发环境的搭建、前端技术、后端技术以及PHP框架; 第二篇包括第5~10章,第5~7章介绍了3个PHP课程设计项目案例,即“内容管理系统”“日程管理系统”以及“在线课程系统”,分别采用面向过程、面向对象以及Smarty模板+面向对象的程序设计方法进行开发; 第8~10章介绍了3个PHP的实践性项目案例,即“校园信息平台”“电子商务系统”以及“在线办公系统”,分别采用WordPress开源软件、CodeIgniter框架以及ThinkPHP 6框架技术进行开发。

本书结构清晰、语言简练、内容翔实,具有系统性、综合性和实用性等特点。书中选配的6个项目案例均来自实际,全面覆盖了PHP项目开发的基础理论知识及技术规范,并配套了同步的视频讲解,非常适合具备基本的计算机程序设计知识以及Web技术知识的读者。

本书可作为高等院校计算机专业、网络技术培训中心等相关课程的教材或教学参考书,也可供软件开发人员进行项目开发、在校学生进行课程设计与毕业设计时参考。


编辑推荐

PHP程序设计语言,是目前国内外最普及、使用最为广泛的Web应用开发语言之一。由于其语法规则与C、C++和Java等高级语言基本相似,又加上丰富的技术文档与学习资源,所以,入门PHP相对容易。但是,要使用它开发出优质、高效,具有复杂业务逻辑的、实用的Web应用项目,却并不是一件简单的事情。
与其他计算机程序设计语言一样,学习PHP程序设计的最终目的,就是要为用户提供性能优异的软件产品,从而创造出更多的社会效益与经济效益。所以,在学习PHP的时候,一定要把理论知识和实际应用紧密结合起来。本书构建起了一套从理论到实践,非常完整的PHP项目开发知识体系;是一本既能够用于PHP学习辅助,又能够用于提高的PHP项目开发中级教程。


目录

向上滑动阅览

第一篇开 发 准 备


第1章运行环境

1.1环境搭建

1.1.1WampServer的安装

1.1.2WampServer的配置

1.2环境测试

1.2.1PHP项目的安装

1.2.2PHP项目的运行

1.3本章小结


第2章前端技术

2.1网页设计

2.1.1网页文档

2.1.2网页页面布局

2.1.3网页设计案例

2.2页面元素操作

2.2.1HTML DOM模型

2.2.2DOM操作

2.3网页事件处理

2.3.1事件绑定

2.3.2事件处理

2.3.3AJAX技术

2.4前端框架简介

2.4.1jQuery

2.4.2Bootstrap

2.4.3Layui

2.5本章小结


第3章后端技术

3.1PHP语言基础

3.1.1语法基础

3.1.2流程控制

3.1.3字符串

3.1.4数组

3.1.5错误处理

3.2面向过程编程

3.2.1数据输入

3.2.2会话管理

3.2.3文件操作

3.2.4数据库操作

3.3面向对象编程

3.3.1类与对象

3.3.2继承与多态

3.3.3辅助函数

3.3.4高级特性

3.3.5数据库操作

3.4PHP扩展与应用

3.4.1PEAR扩展库

3.4.2PDF扩展

3.5本章小结


第4章PHP框架

4.1PHP框架简介

4.2CodeIgniter框架

4.2.1下载与测试

4.2.2工作原理

4.2.3简单案例

4.3ThinkPHP框架

4.3.1安装与测试

4.3.2工作原理

4.3.3简单实例

4.4WordPress开源软件

4.4.1下载与安装

4.4.2简单应用

4.4.3主题开发

4.5本章小结


第二篇项 目 案 例


第5章内容管理系统

5.1项目简介

5.1.1功能描述

5.1.2运行预览

5.2项目准备

5.2.1系统初步设计

5.2.2系统流程设计

5.2.3数据库设计

5.3后台功能实现

5.3.1主页设计

5.3.2登录与登出

5.3.3用户信息管理

5.3.4内容管理

5.4前台功能实现

5.4.1前台首页

5.4.2内容详情

5.4.3分类查询

5.4.4文章搜索

5.5本章小结


第6章日程管理系统

6.1项目简介

6.1.1功能描述

6.1.2运行预览

6.2系统架构设计

6.2.1系统URL访问模式

6.2.2系统架构初步设计

6.2.3系统架构优化设计

6.2.4类文件的自动加载

6.2.5视图文件的加载

6.3前台功能实现

6.3.1前台首页

6.3.2日历的显示

6.3.3日程的显示

6.3.4用户注册与登录

6.3.5用户中心

6.4后台功能实现

6.4.1用户管理

6.4.2日程管理

6.5本章小结


第7章在线课程系统

7.1项目简介

7.1.1系统功能结构

7.1.2系统流程

7.1.3系统预览

7.2数据库设计

7.2.1数据库概念设计

7.2.2创建数据库及数据表

7.3系统架构设计

7.3.1文件目录结构

7.3.2系统架构搭建

7.4系统功能实现

7.4.1用户中心

7.4.2系统主页

7.4.3在线学习

7.4.4在线答疑

7.4.5在线测试

7.5本章小结


第8章校园信息平台

8.1项目简介

8.1.1功能描述

8.1.2运行预览

8.2开发准备

8.2.1WordPress安装

8.2.2主题初步设计

8.3模板设计

8.3.1主页模板

8.3.2信息详情模板

8.3.3留言和回复模板

8.3.4页面类型模板

8.3.5搜索页面模板

8.4功能实现

8.4.1导航功能

8.4.2搜索功能

8.4.3内容显示

8.4.4侧边栏设计

8.4.5信息详情

8.5本章小结


第9章电子商务系统

9.1项目简介

9.1.1功能描述

9.1.2运行预览

9.2开发准备

9.2.1框架准备

9.2.2基本配置

9.2.3静态资源

9.2.4自定义资源

9.3数据库设计

9.3.1数据库概念设计

9.3.2数据表设计

9.4前台功能模块设计

9.4.1前台首页设计

9.4.2商品展示模块

9.4.3购物车模块

9.4.4订单处理模块

9.5后台功能模块设计

9.5.1后台首页设计

9.5.2商品信息管理

9.6本章小结


第10章在线办公系统

10.1项目简介

10.1.1功能描述

10.1.2运行预览

10.2开发准备

10.2.1ThinkPHP 6下载与安装

10.2.2ThinkPHP 6本地环境配置

10.2.3thinkTemplate模板引擎安装

10.2.4ThinkPHP多应用模式

10.2.5静态资源准备

10.3数据库设计

10.3.1数据库概念设计

10.3.2数据库物理结构设计

10.4功能实现

10.4.1前台首页设计

10.4.2用户注册与登录

10.4.3前台主页设计

10.4.4人事消息模块

10.4.5考勤管理模块

10.4.6后台管理模块

10.5本章小结


参考文献

3

精彩推荐


文章转载自清华计算机学堂,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论