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

//微擎 开发一个便利店

步骤一. 需求分析

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

  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 ;

步骤四. 安装模块

建表完成后 需要安装模块

步骤五. 功能开发(核心)

【module.php】 - 【参数设置】
settingsDisplay($settings) 参数设置 设置便利店信息
 
【site.php】 - 【doWeb(后台)】
doWebCategory() 商品分类 设置商品分类信息 (学会如何手动添加链接入口到管理中心菜单)
doWebGoods() 商品管理 设置商品信息
doWebOrders() 订单管理
设置直接访问(direct = true)
订单信息查询
 
【site.php】 - 【doMobile(微站)】
doMobileStore() 便利店首页 商品列表, 商品加入购物车
doMobileCart() 购物车 购物车商品查看与结算生成订单
doMobileOrders() 我的订单 订单列表查看与付款(未完成)
doMobilePay() 付款 付款(未完成)
 
【module.php】 - 【规则定义】
fieldsFormDisplay() 编辑规则时附加表单展示  
fieldsFormValidate() 编辑规则时附加表单验证  
fieldsFormSubmit() 保存规则时附加表单保存  
ruleDeleted() 卸载模块时清理数据  
 
【processor.php】 - 【消息处理器】
respond() 消息处理器 实际处理消息
 
【receiver.php】 - 【消息订阅器】
receive() 消息订阅器  
 
【manifest.xml】 - 【设置直接访问(direct)】
<entry … direct=“true” /> Web 端  
App 端  
 
【site.php】 - call - 【扩展菜单】
<bindings>
<[menu|home|profile|shortcut] call=“func”>
binding - Xxx - call  

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(源码)

{template ‘common/header‘}

<div class="main">
    <form action="" method="post" class="form-horizontal form" id="setting-form">
        <div class="panel panel-default">
            <div class="panel-heading">便利店信息</div>
            <div class="panel-body">
                <div class="form-group">
                    <label class="col-xs-12 col-sm-3 col-md-2 col-lg-2 control-label">名称</label>
                    <div class="col-sm-8">
                        <input type="text" name="data[name]" class="form-control" value="{$settings[‘name‘]}" />
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-xs-12 col-sm-3 col-md-2 col-lg-2 control-label">徽标图案</label>
                    <div class="col-sm-8">
                        {php echo tpl_form_field_icon(‘data[icon]‘, $settings[‘icon‘]);}
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-xs-12 col-sm-3 col-md-2 col-lg-2 control-label">徽标颜色</label>
                    <div class="col-sm-8">
                        {php echo tpl_form_field_color(‘data[color]‘, $settings[‘color‘]);}
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-xs-12 col-sm-3 col-md-2 col-lg-2 control-label">品牌图片</label>
                    <div class="col-sm-8">
                        {php echo tpl_form_field_image(‘data[logo]‘, $settings[‘logo‘]);}
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-xs-12 col-sm-3 col-md-2 col-lg-2 control-label">品牌宣传</label>
                    <div class="col-sm-8">
                        {php echo tpl_form_field_multi_image(‘data[pics]‘, $settings[‘pics‘]);}
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-xs-12 col-sm-3 col-md-2 col-lg-2 control-label">单音频</label>
                    <div class="col-sm-8">
                        {php echo tpl_form_field_audio(‘data[audio]‘, $settings[‘audio‘]);}
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-xs-12 col-sm-3 col-md-2 col-lg-2 control-label">多音频</label>
                    <div class="col-sm-8">
                        {php echo tpl_form_field_multi_audio(‘data[multiaudio]‘, $settings[‘multiaudio‘]);}
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-xs-12 col-sm-3 col-md-2 col-lg-2 control-label">注册日期</label>
                    <div class="col-sm-8">
                        {php echo tpl_form_field_date(‘data[registerdate]‘, $settings[‘registerdate‘]);}
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-xs-12 col-sm-3 col-md-2 col-lg-2 control-label">营业时间</label>
                    <div class="col-sm-8">
                        {php echo tpl_form_field_daterange(‘data[businesshours]‘, $settings[‘businesshours‘], true);}
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-xs-12 col-sm-3 col-md-2 col-lg-2 control-label">地址</label>
                    <div class="col-sm-8">
                        {php echo tpl_form_field_district(‘data[address]‘, empty($settings[‘address‘]) ? array() : $settings[‘address‘]);}
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-xs-12 col-sm-3 col-md-2 col-lg-2 control-label">地理位置</label>
                    <div class="col-sm-8">
                        {php echo tpl_form_field_coordinate(‘data[map]‘, $settings[‘map‘]);}
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-xs-12 col-sm-3 col-md-2 col-lg-2 control-label">行业</label>
                    <div class="col-sm-8">
                        {php echo tpl_form_field_industry(‘data[industry]‘, $settings[‘industry‘][‘parent‘], $settings[‘industry‘][‘child‘]);}
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-xs-12 col-sm-3 col-md-2 col-lg-2 control-label">联系人</label>
                    <div class="col-sm-8">
                        <input type="text" name="data[linkman]" class="form-control" value="{$settings[‘linkman‘]}" />
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-xs-12 col-sm-3 col-md-2 col-lg-2 control-label">联系电话</label>
                    <div class="col-sm-8">
                        <input type="text" id="phone" name="data[phone]"  class="form-control" value="{$settings[‘phone‘]}">
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-xs-12 col-sm-3 col-md-2 col-lg-2 control-label">所在地址</label>
                    <div class="col-sm-8">
                        <input type="text" id="address" name="data[detailedaddress]"  class="form-control" value="{$settings[‘detailedaddress‘]}">
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-xs-12 col-sm-3 col-md-2 col-lg-2 control-label">便利店介绍</label>
                    <div class="col-sm-8">
                        <textarea style="height:200px;" id="description" name="data[description]" class="form-control description" cols="60">{$settings[‘description‘]}</textarea>
                    </div>
                </div>
                <div class="form-group">
                    <div class="col-xs-12 col-sm-9 col-md-10 col-lg-10 col-sm-offset-3 col-md-offset-2 col-lg-offset-2">
                        <input name="submit" type="submit" value="提交" class="btn btn-primary" />
                        <input type="hidden" name="token" value="{$_W[‘token‘]}" />
                    </div>
                </div>
            </div>
        </div>
    </form>
</div>

<script>
require([‘jquery‘, ‘util‘], function($, util){
    $(function(){
        $(‘#setting-form‘).submit(function(){
            var result = true;
            if($(‘input[name="data[name]"]‘).val() == ‘‘){
                result = false;
                util.message(‘未填写便利店名称.‘);
            }
            if($(‘input[name="data[logo]"]‘).val() == ‘‘){
                result = false;
                util.message(‘未填加便利店LOGO.‘);
            }
            if($(‘input[name="data[linkman]"]‘).val() == ‘‘){
                result = false;
                util.message(‘未填写便利店联系人.‘);
            }
            if($(‘input[name="data[phone]"]‘).val() == ‘‘){
                result = false;
                util.message(‘未填写便利店联系电话.‘);
            }
            if($(‘input[name="data[address]"]‘).val() == ‘‘){
                result = false;
                util.message(‘未填写便利店地址.‘);
            }
            return result;
        });
    });
});
</script>

{template ‘common/footer‘}
  使用 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 知识点

查看 源码

【参数设置】通过 settingsDisplay() 方法, 展示和保存表单.

<?php
/**
 * 便利店模块定义
 *
 * @author Gorden
 * @url http://bbs.we7.cc/
 */
defined(‘IN_IA‘) or exit(‘Access Denied‘);

class We7_storeModule extends WeModule {

    public function settingsDisplay($settings) {

        // 声明为全局才可以访问到.
        global $_W, $_GPC;

        // 验证表单来源安全
        if(checksubmit()) {

            // $_GPC 可以用来获取 Cookies,表单中以及地址栏参数
            $dat = $_GPC[‘dat‘];

            // 验证表单, 通过 message() 方法提示用户操作错误信息
            empty($dat[‘name‘]) && message(‘请填写便利店名称‘);
            empty($dat[‘logo‘]) && message(‘请填写便利店 LOGO‘);
            empty($dat[‘linkman‘]) && message(‘请填写便利店联系人‘);
            empty($dat[‘phone‘]) && message(‘请填写便利店联系电话‘);
            empty($dat[‘address‘]) && message(‘请填写便利店地址‘);
            empty($dat[‘description‘]) && message(‘请填写便利店介绍‘);

            //字段验证, 并获得正确的数据$dat
            if (!$this->saveSettings($dat)) {
                message(‘保存信息失败‘,‘‘,‘error‘);   // 保存失败
            } else {
                message(‘保存信息成功‘,‘‘,‘success‘); // 保存成功
            }
        }

        // 模板中需要用到 "tpl" 表单控件函数的话, 记得一定要调用此方法.
        load()->func(‘tpl‘);

        // 调用模板, 展示参数设置表单
        include $this->template(‘setting‘);
    }

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

导航链接

参数设置

步骤六. 发布模块

以下载源码代码为准.

然后

目录 [隐藏]

【便利店】 - 参数设置

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

导航链接

参数设置

时间: 2024-10-10 21:12:40

微擎/微赞开发示例 学习记录的相关文章

微擎 微赞等系统源码模块若干问题解决方法及说明汇总

关于xmlns: 功能模块不显示模块,在相对应的平台下请修改 manifest.xml 文件第二行xmlns所对应的地址: 如果需要放到微擎里使用,修改如下 关于本站xmlns地址:www.sogua2008.com 关于修改xmlns网址文件路径:framework\model\extension.mod.PHP 关于模块的安装:上传模块至 addons 目录下,后台-系统-模块-安装模块 关于微擎微赞数据库报错,缺表跟缺少字段的解决方法新手说明 翻译成人话就是在这个数据库中这个数据表不存在.

第二篇 基于微擎的模块开发—PHP

从陌生到如今能勉强完成第一个微网站模块的实现.也算是一个小小的进步,从设计数据库到,返回数据,前端模版渲染 每一点都是有点难度的.所以我想总结一下,我是如何实现一个微擎模块. 第一,首先得分析某个模块的想实现什么需求,根据需求设计合理的数据库结构. 第二,了解微擎的结构,运行流程,设计模块结构. 第三,重点就是site.php , 完成site.php 需要一定的php的编程能力, 第四,site.php 其中 通过 pdo 从数据库的获取我们想得到数据源. 微擎已封装其路由机制, doWeb

微擎二次开发相关

微擎模块管理左侧的导航菜单(模块名称)封面入口:由模块设计(/web/index.php?c=extension&a=module&do=designer&)里的“功能封面”生成,a=cover. (模块名称)业务菜单:由模块设计里的“管理中心导航菜单”生成,a=entry模块设计完成后生成manifest.xml,安装模块的时候系统会根据manifest.xml文件中bindings部分内容,添加到ims_modules_bindings表中.导航菜单里的列表其实是显示ims_m

微擎二次开发之目录结构

pro ---- 网站根目录 ├─ addons -- 模块安装目录 │ ├─ wdl_shopping - 微商城 │ └─ - - 其他扩展模块 ├─ attachment -- 公共资源及附件 ├─ app --- 微站功能 ├─ web --- 后台管理 ├─ data │ ├─ tpl -- 模板编译后的文件夹 │ └─ config.php – 系统配置 ├─ framework -- 系统通用的工具类和方法 ├─ payment --- 支付功能 └─ index.php -- 系

iOS开发架构学习记录

闲着没事看了一些iOS开发架构的视频,简单的介绍了几个常用的架构设计,现将它记录如下,以后有时间再专门写这方面的内容,大家可以看看,感兴趣的就进一步学习. 一.架构基础 1.架构设计的目的 进一步解耦. 2.耦合的方式 1)单例-彼此知道对方的存在 2)delegate-被委托方不知道委托方的存在,委托方知道被委托方的存在 3)通知-双方都不知道对方的存在 二.MVC C可以控制V的渲染,C可以修改M. V可以将用户这边采集到的数据和用户事件反馈给C做进一步的处理,V可以读取到M中的数据进而展示

微擎及智能名片小程序安装步骤

微擎及智能名片小程序安装步骤 宝塔安装 1,ssh登录服务器,执行如下操作即可,需root用户身份安装 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh 9b4e0b47 2,您想现在安装bt面板到www目录吗? 输入y 然后按回车下一步 3,安装宝塔完毕,服务器会提示宝塔面板的管理登录地址,账号密码(用电脑的浏览器访

微赞微擎手动增加模块数据库表结构详解

微赞微擎手动增加模块数据库表结构详解 有时候微擎或微赞的模块没有安装模块的xml文件,那我们先想安装到自己的系统上,要怎么处理呢,下面我们详细的介绍下步骤,个人能力有限,如有不正确之处,敬请谅解~ 1.模块的代码复制 这个就不用多说了吧,当然需要把相应的addons文件夹里的模块复制到自己系统的目录里,不然不要做一下的事情了 2.数据库表结构修改 代码复制过来,如果有相应的xml安装包或者install.php文件,可以直接安装,但是我们这里讲的是没有,那只能把原来要复制的表结构记录复制过来,插

微擎人人商城二次开发01

刚开始工作就接触微擎人人商城的二次开发,折腾了很久下面总结下我所学到的: 首先是安装包ewei_shopv2: 将后端ewei_shopv2文件夹上传至微赞微擎Addons目录 文件夹介绍 路由:http://*******/web/index.php?c=site&a=entry&m=ewei_shopv2&do=web&r=agency.productc = site :a = entry表示后台模块m 表示具体哪个模块do 要执行的site类中的doWeb***方法r

微擎模块开发manifest.xml文件详解

微擎在安装或卸载模块时会根据manifest.xml生成(或删除)数据库中相应记录,并执行manifest.xml里指定的脚本. <application setting='true'> <name><![CDATA[壹应用]]></name> <identifie><![CDATA[jq_first]]></identifie> <version><![CDATA[1.4]]></versi