升讯威微信营销系统开发实践:所见即所得的微官网( 完整开源于 Github)

时间:2023-01-29 17:16:51

GitHubhttps://github.com/iccb1013/Sheng.WeixinConstruction
因为个人精力时间有限,不会再对现有代码进行更新维护,不过微信接口比较稳定,经测试至今没有变化,功能依然全部可用,你可以在此基础上,二次开发,完成你的业务功能,也可以抽取本平台中的代码复用在你的项目中,请遵循 MIT 开源协议保留我的版权声明和网站链接即可。

GitHubhttps://github.com/iccb1013/Sheng.WeixinConstruction.WeixinContract
微信协议包装的项目还有一个单独的工程,这个工程的版本稍新,我会进行一定的更新维护,如最近增加了几个小程序开发需要使用到的接口。但是注意因为代码结构经过优化调整,直接引用到升讯威微信平台中,需要修改一些类的引用和名称。

升讯威微信营销系统开发实践系列
升讯威微信营销系统开发实践:(1)功能概要与架构设计
升讯威微信营销系统开发实践:(2)中控服务器的详细设计
升讯威微信营销系统开发实践:(3)功能介绍与此项目推广过程的一些体会
升讯威微信营销系统开发实践:(4)源代码结构说明 与 安装部署说明


微官网是微信平台上一个重要的功能,几乎所有的微信公众号都有这样的需求。

微官网一般至少包括以下几个部分:

1.微主页;
2.分类信息展示(如产品展示、顾问/专家展示、楼层展示等等);
3.自定义页面(如企业介绍、联系方式等任意页面);
4.自定义表单(如在线报名、在线预约等);
5.其它模块(如各类活动页面等等)

本篇我们介绍在升讯威微信营销系统中,微主页功能的设计和实现方法。

在过去我们做定制化项目时,微主页一般只需要美工完成设计,前端工程师完成静态页面,后台开发人员完成相关编码即可。不同的项目只需设计制作不同的前端画面即可。

但是当我们想要开发一个服务于不同公众号的第三方平台时,微主页的设计变得复杂起来,微主页是一个企业的门户,担当着展示企业形象的重要作用,不能只是简单的提供固定式样,必须要能在平台中灵活配置,而且配置的过程不能复杂,毕竟用户不是专业人士,需要一种灵活、简单、所见即所得的方式让用户在无需专业知识的情况下,就能搭建微主页。

为了达到这个目标,我们需要两种纬度的设计:

1.基于模版

让用户在选择钟意的模版后,只需上传自己的图片即可。

2.完全自定义

面向有一定前端开发能力的用户,为他们提供开发接口,使这部分用户可以自己制作静态HTML内容,并可以与系统既有功能进行融合交互。
此外我们希望两种模式能够互通,比如用户选择了钟意的模版后,除了上传自己的图片,还想更进一步的调整,怎么办呢?当然不能说让他再照着模版自己做一套,我们把两种模式打通,让用户可以把喜欢的模版一键导入自定义模式,然后再进行细节调整即可。

一、基于模版

基于模版很容易理解,我们在系统中预置许多制作好的微主页,用户选择后,进行轻度的自定义,如上传自己的图片,然后发布即可。

升讯威微信营销系统开发实践:所见即所得的微官网( 完整开源于 Github)

这里有一个细节需要留意的就是怎样实现所见即所得的的功能,让用户能够在后台实时的看到最终效果,我们需要在电脑版后面上模拟微信端最终的呈现效果。

升讯威微信营销系统开发实践:所见即所得的微官网( 完整开源于 Github)

这里有两个方案进行模拟:

1)把最终效果图分层拆开。

这需要我们的设计模版时,就制作好分层的效果图,然后在后台通过堆叠的方式进行展示,当用户上传自定义的图片时,将可变换的图层进行替换,来达到预览的效果。

升讯威微信营销系统开发实践:所见即所得的微官网( 完整开源于 Github)

2)在iFrame容器中填充手机端代码进行模拟。

这种方式实现起来会稍微复杂一些,我们在后台画面中,嵌入一个iFrame,作为模拟的容器,当用户选择钟意的模版时,我们把微主页模版的代码,渲染到这个iFrame中,在iFrame中模拟微信端的效果和行为。

升讯威微信营销系统开发实践:所见即所得的微官网( 完整开源于 Github)

后台页面与 iFrame 交互的方式很简单,用 JavaScript 调用即可。

假设我们有 1.html

<a href="#" onclick="window.frames['frame1'].MyNext()">aa</a>
<iframe id="frame1" src="2.html" ></iframe>

2.html

<script language="javascript" type="text/javascript">
function MyNext()
{
alert(1);
}
</script>

在1.htm中点击test按钮,可以使2.htm(iframe页面)中mybutton按钮失效.就这么简单,呵呵.如果要调用2.htm中的JS函数这样写:

self.frames['a'].funtionname(param)

目前各种微信第三方平台,都提供了基于模版的微主页功能,只是大多数做的比较粗糙,效果不太好,大部分是堆砌大量类似的模版来吸引用户,实际上大多数模版只是背景图片不同。
而在我们的平台中,通过模版引擎,我们只需要设计好模版的框架,让用户自己上传图片即可达到许多个性化的效果。

二、完全自定义

对于要求更高的用户,基于模版的功能并不能完全满足他们的要求,也是目前其它第三方微信平台的一个短板,或是主要盈利项目。

目前几乎所有的微信第三方平台都不提供完全自定义主页的功能,如果模版不能满足需求,只能寻求第三方平台的定制化服务,通常价格不菲,大多数时候第三方平台公司为了引导用户接受定制化开发服务,模版的制作水准和效果也并不会很高。

所以我们这里设计实现了一个类似于CMS的微主页引擎,把微主页的呈现和功能彻底进行了拆分,我们把微主页中所需要使用的功能实现好,然后通过 JavaScript 提供接口,并将微主页中所需的基本 CSS 样式和 JavaScript 函数进行了封装,用户在设计自己的静态页面时,可以直接引用这些 CSS 样式,或直接调用系统预置的 JavaScript 函数。
用户完成微主页的设计后,只需把HTML代码保存到后台,系统在微信端呈现微主页时,会使用模版引擎呈现用户的HTML代码,并初始化相关的功能。
基于这样的模版引擎,如果用户稍具前端开发的能力,即可在极短的时间内,可能1天,甚至是半天时间,就可以制作出个性化的微主页,并无需支付任何所谓的定制化开发的费用。

架构设计:

升讯威微信营销系统开发实践:所见即所得的微官网( 完整开源于 Github)

后台画面:

升讯威微信营销系统开发实践:所见即所得的微官网( 完整开源于 Github)

自定义微主页的关键在于需要为用户提供数据和功能操作的接口,例如每日签到功能,用户在自己设计的微主页HTML代码中,怎么样调用系统的每日签到功能呢?

我们把这个功能抽象出来单独实现,通过 JavaScript 提供 API 供用户调用,并提供一个回调通知用户每日签到的结果,例如用户在自己的 HTML 代码中编写以下脚本:

  function documentReady() {
if (_member.SignedIn) {
$("#spanSignIn").html("已签到");
} else {
$("#spanSignIn").html("每日签到");
}
}
function signInCallback(result) {
switch (result.reason) {
case 0:
$("#spanPoint").html(_member.point);
$("#spanSignIn").html("已签到");
layerAlert("签到成功!获得积分 <b>" + result.signInPoint + "</b> 点~");
break;
case 1:
layerAlert("今天已经签到过了哦~");
break;
default:
layerAlert("未知返回结果:" + result.reason);
break;
}
}

从代码中可以看出,我们将用户信息封装成了 _member 对象,通过这个对象向用户提供当前会员的信息,还为用户提供了

function signInCallback(result)

这样的每日签到回调,会员在签到后,系统自动调用这一回调方法,并传入每日签到的结果。

实现方法

实现的方法并不复杂,我们只需将一般微主页中的功能提取后,在模块引擎中实现好,同时我们将前台呈现逻辑独立出来,使之与后台代码完全分开。
此外我们将共通的 JavaScript 函数 和 CSS 样式也提取出来,用户在设计自己的微主页时,引入这些 JavaScript 文件和 CSS 文件,进行设计,设计完成后,将 Body 段中的 HTML 代码保存到后台,微信端的呈现时,首先初始化模版引擎和基础数据,然后读取用户自定义 HTML 代码,进行渲染。

====

本章节结束。

写一篇文章,加上排版校对大约要用掉六小时左右的时间,你的支持是我最大的动力,对你有帮助的话请点击右下角“推荐”,谢谢。  :)

欢迎加我QQ交流探讨,共同学习:279060597,另外我在南京,有南京的朋友吗?

升讯威微信营销系统开发实践:所见即所得的微官网( 完整开源于 Github)的更多相关文章

  1. 升讯威微信营销系统开发实践:(4)源代码结构说明 与 安装部署说明( 完整开源于 Github)

    GitHub:https://github.com/iccb1013/Sheng.WeixinConstruction因为个人精力时间有限,不会再对现有代码进行更新维护,不过微信接口比较稳定,经测试至 ...

  2. 升讯威微信营销系统开发实践:(3)功能介绍与此项目推广过程的一些体会( 完整开源于 Github)

    GitHub:https://github.com/iccb1013/Sheng.WeixinConstruction因为个人精力时间有限,不会再对现有代码进行更新维护,不过微信接口比较稳定,经测试至 ...

  3. 升讯威微信营销系统开发实践:微信接口的 &period;NET 封装

    GitHub:https://github.com/iccb1013/Sheng.WeixinConstruction因为个人精力时间有限,不会再对现有代码进行更新维护,不过微信接口比较稳定,经测试至 ...

  4. 升讯威微信营销系统开发实践:(2)中控服务器的详细设计( 完整开源于 Github)

    GitHub:https://github.com/iccb1013/Sheng.WeixinConstruction因为个人精力时间有限,不会再对现有代码进行更新维护,不过微信接口比较稳定,经测试至 ...

  5. 升讯威微信营销系统开发实践:(1)功能概要与架构设计( 完整开源于 Github)

    GitHub:https://github.com/iccb1013/Sheng.WeixinConstruction因为个人精力时间有限,不会再对现有代码进行更新维护,不过微信接口比较稳定,经测试至 ...

  6. 升讯威微信营销系统开发实践:订阅号和服务号深入分析( 完整开源于 Github)

    GitHub:https://github.com/iccb1013/Sheng.WeixinConstruction因为个人精力时间有限,不会再对现有代码进行更新维护,不过微信接口比较稳定,经测试至 ...

  7. 升讯威微信营销系统开发实践:(5) Github 源码:微信接口的 &period;NET 封装。

    微信开发系列教程,将以一个实际的微信平台项目为案例,深入浅出的讲解微信开发.应用各环节的实现方案和技术细节. 本系列教程的最终目标是完成一个功能完善并达到高可用性能指标的微信管理软件,所以除了与微信本 ...

  8. GitHub开源:升讯威微信营销系统(第三方微信平台)完整源代码

    GitHub:https://github.com/iccb1013/Sheng.WeixinConstruction 升讯威微信营销系统开发实践系列升讯威微信营销系统开发实践:(1)功能设计与架构设 ...

  9. 【开源分享】微信营销系统(第三方微信平台)github 开源

    升讯威微信营销系统(微信第三方平台) 在线体验:http://wxcm.eeipo.cn/开源地址GitHub:https://github.com/iccb1013/Sheng.WeixinCons ...

随机推荐

  1. LODOP打印插件

    HTML代码(请先下载对应LODOP插件安装)  -    打印onclike事件CreatePrintPage()打印函数,LODOP.PREVIEW()打印预览. <div class=&q ...

  2. object-c面向对象1

    ---恢复内容开始--- 类,对象,方法,属性. 类是object-c一种重要的数据类型,是组成object-c程序的基本要素.object-c的类声明和实现包括两个部分:接口和实现部分. @inte ...

  3. iOS Dev &lpar;20&rpar; 用 AVAudioPlayer 播放一个本地音频文件

    iOS Dev (20) 用 AVAudioPlayer 播放一个本地音频文件 作者:CSDN 大锐哥 博客:http://blog.csdn.net/prevention 步骤 第一步:在 Proj ...

  4. HDU 2897 邂逅明下(巴什博奕变形)

    巴什博奕的变形,与以往巴什博奕不同的是,这里给出了上界和下界,原先是(1,m),现在是(p,q),但是原理还是一样的,解释如下: 假设先取者为A,后取者为B,初始状态下有石子n个,除最后一次外其他每次 ...

  5. &lbrack;hdu5225&rsqb;&lbrack;BC&num;40&rsqb;Tom and permutation

    好久没写题解了..GDKOI被数位DP教做人了一发,现在终于来填数位DP的大坑了>_<. 发现自己以前写的关于数位DP的东西...因为没结合图形+语文水平拙计现在已经完全看不懂了嗯. 看来 ...

  6. Trusted Execution Technology &lpar;TXT&rpar; --- 度量(Measurement)篇

    版权声明:本文为博主原创文章,未经博主允许不得转载.http://www.cnblogs.com/tsec/p/8413537.html 0. 导读 TXT基本原理篇介绍了TXT安全度量的基本概念,包 ...

  7. 《生命》第一集:Chanllenge of Life (生命的挑战)

    开篇讲的是弗罗里达海岸的海豚用尾巴荡起浑水圈批量捕鱼,肯尼亚的猎豹用集体战术捕猎体积大于自己的鸵鸟,马达加斯加的变色龙用伪装的方式来偷袭昆虫,紧接着讲的是南极洲的食蟹海豹如何从天敌虎鲸的围捕中惊险逃脱 ...

  8. 单击列表行前边的checkbox被选中,再单击,取消选中

    需求描述:单击datatabl的一行数据,前边的checkbox被勾选上,再次点击,选中取消,第一次碰到这种需求,不过呢也很实用,简单记录一下 代码: //html代码<tr class=&qu ...

  9. Java启动工程时,加载固定数据到Map中(不用每次访问数据库)

    如下:启动工程时,加载配置文件的用户名和密码到map中, 通过getKeyByValue()获取即可 import java.util.HashMap; import java.util.Map; i ...

  10. java的异常抛出和String类常用方法

    一.异常抛出 异常是程序的异种非错误的意外情况,分为运行期异常(RuntimeException)和编译期异常(CheckedExcption) 处理异常可以用try——catch或自定义 impor ...