微擎/微赞开发示例 学习记录

//微擎 开发一个便利店 

步骤一. 需求分析

首先,你要明确你做的模块包含什么功能。

  1. 便利店管理 — (store)
  2. 商品管理 — (goods)
  3. 客户管理 — (customers)
  4. 订单管理 — (orders)
  5. 购物车与支付 — (cart)
  6. 统计功能 — (statistics) (待续…)

步骤二. 设计新模块

开始设计新模块前,你要知道通过你的模块用户能干什么, 并起一个很棒的英文名字.

操作用户能干什么   微信用户能干什么
1. 管理便利店 (store) 1. 逛便利店 (store)
2. 管理商品 (goods) 2. 查看购物车 (cart)
3. 管理订单 (order) 3. 查看订单 (order)
4. 管理客户 (customer) 4. 付款 (pay)

先给模块起个名字吧:we7_store (便利店)

注意 : 模块标识必须小写

好了,接下来要设计模块了。

设计模块的相关内容 

【设计新模块】 - 【便利店】

模块基本信息
模块名称 便利店
模块标识 we7_store
版本 1.0
模块类型 主要业务
模块简述 一个简单的便利店
模块介绍 教初学者如何快速开发一个微擎模块.
作者 Gorden
发布页 http://bbs.we7.cc/
设置项 ✔ 存在全局设置项
 
公众平台消息处理选项
订阅的消息类型 ✔ 文本消息(重要)
 
直接处理的类型 ✔ 文本消息(重要)
 
是否要嵌入规则 ✔ 需要嵌入规则
 
微站功能绑定
项目名称 操作名称 入口标识 操作附加数据 无需登录直接展示
 
功能封面 便利店首页 store  
 
管理中心导航菜单 商品管理 goods  
订单管理 orders  
 
微站首页导航图标 便利店首页 store  
 
微站个人中心导航 便利店订单 orders  
 
微站快捷功能导航 便利店订单 orders  
 
模块发布
兼容的微擎版本 ✔ WeEngine 0.6
模块缩略图 icon.jpg
模块封面 preview.jpg
模块安装脚本  
模块卸载脚本  
模块升级脚本  

生成源代码预览

 
--

步骤三. 创建表(SQL语句)

你可以使用控制台或手动书写 SQL 语句来创建模块相关表。

因为模块与统一公众号相关,所以所有表结构里均与 $uniacid 相关.

随着模块的开发可能会随时变动数据表结构.

-- phpMyAdmin SQL Dump
-- version 4.1.6
-- http://www.phpmyadmin.net
--
-- Host: 127.0.0.1
-- Generation Time: 2014-11-14 10:53:34
-- 服务器版本: 5.6.16
-- PHP Version: 5.5.9
 
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
 
--
-- Database: `we7_pro`
--
 
-- --------------------------------------------------------
 
--
-- 表的结构 `ims_we7_store_cart`
--
 
CREATE TABLE IF NOT EXISTS `ims_we7_store_cart` (
  `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `goodsid` INT(10) UNSIGNED NOT NULL COMMENT '商品编号',
  `uid` INT(10) UNSIGNED NOT NULL COMMENT '微信会员',
  `uniacid` INT(10) UNSIGNED NOT NULL,
  `createtime` INT(10) UNSIGNED NOT NULL COMMENT '加入购物车时间',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
 
-- --------------------------------------------------------
 
--
-- 表的结构 `ims_we7_store_category`
--
 
CREATE TABLE IF NOT EXISTS `ims_we7_store_category` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '分类id',
  `name` VARCHAR(30) NOT NULL COMMENT '类名',
  `orderno` INT(10) UNSIGNED NOT NULL COMMENT '排序',
  `uniacid` INT(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
 
-- --------------------------------------------------------
 
--
-- 表的结构 `ims_we7_store_goods`
--
 
CREATE TABLE IF NOT EXISTS `ims_we7_store_goods` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
  `sn` VARCHAR(30) NOT NULL COMMENT '条码',
  `name` VARCHAR(50) NOT NULL COMMENT '品名',
  `price` DECIMAL(10,2) NOT NULL DEFAULT '0' COMMENT '价格',
  `cost` DECIMAL(10,2) NOT NULL COMMENT '成本价',
  `quantity` INT(11) NOT NULL,
  `uniacid` INT(10) UNSIGNED NOT NULL COMMENT '统一公众号',
  `createtime` INT(10) UNSIGNED NOT NULL COMMENT '添加日期',
  `status` INT(11) NOT NULL COMMENT '1:下架, 2: 上架',
  `categoryid` INT(11) NOT NULL COMMENT '分类 id',
  PRIMARY KEY (`id`),
  KEY `sn` (`sn`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='商品表' AUTO_INCREMENT=1 ;
 
-- --------------------------------------------------------
 
--
-- 表的结构 `ims_we7_store_items`
--
 
CREATE TABLE IF NOT EXISTS `ims_we7_store_items` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `orderid` INT(10) UNSIGNED NOT NULL COMMENT '订单编号',
  `goodsid` INT(10) UNSIGNED NOT NULL,
  `name` VARCHAR(30) NOT NULL COMMENT '品名',
  `price` DECIMAL(10,2) NOT NULL COMMENT '售价',
  `quantity` INT(11) NOT NULL COMMENT '购买数量',
  `cost` DECIMAL(10,2) NOT NULL COMMENT '实时成本',
  `uniacid` INT(10) UNSIGNED NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
 
-- --------------------------------------------------------
 
--
-- 表的结构 `ims_we7_store_orders`
--
 
CREATE TABLE IF NOT EXISTS `ims_we7_store_orders` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `uid` INT(10) UNSIGNED NOT NULL,
  `uniacid` INT(10) UNSIGNED NOT NULL,
  `sn` VARCHAR(30) NOT NULL,
  `amount` DECIMAL(10,2) NOT NULL COMMENT '金额合计',
  `province` VARCHAR(30) NOT NULL,
  `city` VARCHAR(30) NOT NULL,
  `district` VARCHAR(30) NOT NULL,
  `createtime` INT(10) UNSIGNED NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
 
-- --------------------------------------------------------
 
--
-- 表的结构 `ims_we7_store_user`
--
 
CREATE TABLE IF NOT EXISTS `ims_we7_store_user` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uid` INT(10) UNSIGNED NOT NULL,
  `uniacid` INT(10) UNSIGNED NOT NULL,
  `total` DECIMAL(10,2) NOT NULL COMMENT '消费总金额',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

【便利店】 - 参数设置

 

settingsDisplay()

 

1. 功能说明

  1. 对每一个统一公号分别独立保存模块信息,(如:每个统一公号经营一个便利店, 便利店信息要独立保存.)
  2. 此处参数保存不需要单独建表
  3. settingsDisplay() 方法用来控制 参数设置 的页面展示与表单提交.
  4. 系统将自动读取参数设置为 $settings 变量
  5. 通过 include $this→template('setting'); 来调用后台管理模板 template/setting.html
  6. $settings$_W$_GPC 等变量可在调用的模板中使用
  7. 此处将设置便利店基本信息(表单字段)
    • 名称 — ( name )
    • logo — ( logo )
    • 联系人 — ( linkman )
    • 电话 — ( phone )
    • 地址 — ( address )
    • 介绍 — ( description )

HTML 知识点

查看 setting.html(源码)

  使用 Bootstrap CSS 3 使你的模块页面美观并与微擎系统风格保持一致.
 
{$settings['name']}
模板中使用 {$var} 来输出变量. 详情请参阅 模板语法.
2
<input type="text" name="date[name]" class="form-control" value="{$settings['name']}" />
<input type="text" name="date[phone]" class="form-control" value="{$settings['phone']}" />
表单名称使用如: name=“date[name]“ 数组的形式, 提交表单时, 可以将表单值打包
后台 PHP 代码通过 $date = $_GPC['date']; 来获取所有打包的表单值; 否则,你将不得不一个一个获取表单值.
 
<form action="" method="post" class="form-horizontal form" id="setting-form">
	...
	<input type="submit" name="save" value="保存">
	<input type="submit" name="confirm" value="确认">
	<input type="hidden" name="token" value="{$_W['token']}" />
</form>
如果模板中存在多个提交按钮, 后台可以调用checksubmit('save')checksubmit('confirm') 来区分提交的 submit 来源
 
<input type="hidden" name="token" value="{$_W['token']}" />
POST 提交最好加上这行代码, 与 checksubmit()配合使用来验证表单安全.
 
<script>
require(['jquery', 'util'], function($, util){
	$(function(){
		$('#setting-form').submit(function(){
			var result = true;
			if($('input[name="date[name]"]').val() == ''){
				result = false;
				util.message('未填写便利店名称.');
			}
 
			return result;
		});
	});
});
</script>
表单验证
 
{template 'common/header'} <!-- 调用公共模板 web/themes/default/common/header.html -->
 
{template 'common/footer'} <!-- 调用公共模板 web/themes/default/common/footer.html -->
(嵌套)调用模板
 
{php echo tpl_form_field_image('date[logo]', $settings['logo']);}
调用表单控件

3. PHP 知识点

查看 源码

 
if(checksubmit()) { // 本例等价为 if(checksubmit('submit')){}
     // POST 提交表单后执行此代码.
}
通过 checksubmit($name='submit') 验证表单是否为 POST 方式,是否需要继续执行。
 
if(checksubmit('save')){
    // save
}
 
if(checksubmit('confirm')){
    // confirm
}
多 submit 表单提交, 可以调用 checksubmit( $submit_name ) 来区分提交的 submit 来源
 
empty($date['name']) && message('请填写便利店名称');
验证表单, 通过 message() 方法来中断代码执行, 提示用户错误信息并返回到上个访问的页面.
仅限大量逻辑简单的后台字段验证使用
 
$date = $_GPC['date'];
 
$name = $date['name'];
$phone = $date['name'];
获取表单值, $_GPC 是由 $_GET$_POST$_COOKIES 合并而来
 
$this->saveSettings($date);
保存模块设置信息.
 
include $this->template('setting');
调用模板文件 “template/setting.html”.
 
load()->func('tpl');
如果要在模板中使用 表单控件, 必须调用此方法。

4. 界面展示

导航链接

参数设置

原文地址:https://www.cnblogs.com/clphp/p/5430387.html