zoukankan      html  css  js  c++  java
  • 微擎/微赞开发示例 学习记录

    //微擎 开发一个便利店 

    步骤一. 需求分析

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

    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. 界面展示

    导航链接

    参数设置

  • 相关阅读:
    DOS命令大全(二)
    读取本地Json文件
    微信接入详细流程 分享给好友和朋友圈
    IOS开发中(null)与<null>的处理
    iOS 删除NSString中特定字符
    float类型转对象 对象转float类型(一)
    真机调试出现Could not find Developer Disk Image问题解决办法
    iOS开发融云即时通讯集成详细步骤
    UITableVIew 滚动流畅性优化
    Python装饰器
  • 原文地址:https://www.cnblogs.com/clphp/p/5430387.html
Copyright © 2011-2022 走看看