来自客户的项目需求

有一天,有位客户和我说,他想做一个H5激励视频广告业务后台,经过沟通,梳理的后台需求如下:

【H5激励视频广告】

1、一套H5激励视频广告接口

1)获取广告接口,进行展示,提供给客户端开发者用

参考:http://developers.adnet.qq.com/doc/ios/union/union_h5_reward

2)事件上报接口

展示成功、广告跳转、浏览器关闭、视频插放开始、视频插放完成等

3)回调接口,提供给流量商那边回调数据

接口可参考:https://ad.68mob.com/doc/api2.0.html

2、管理后台

1)接口密钥分配,针对不同的流量商进行后台生成,可删除

2)统计报表,个展示数量、点击数量、回调 能知道我们展示多少 点击多少 点击率多少

3)广告管理,上/删 视频素材 上/删 视频标题 上/删 行动语 上/删 封面 上/删 logo 上/删 落地页链接

4)视频、图片等素材存在服务器,不使用云存储

3、其他

1)交付全部源代码

2)进行线上安装与部署

3)提供在线接口文档

4)配合协作第一位开发者、第一位流量商接入使用

5)输出产品原型PRD

就其中后台的开发任务,可以基于PhalApi开源框架的portal运营平台进行快速开发,估计可以从5天的时间缩减成1天的开发时间。

广告业务后台的PRD如下,有:

  • 后台登录
  • 广告管理
  • 密钥管理
  • API接口

下面结合这个真实案例,介绍PhalApi开源框架,如何帮助项目进行快速开发。

PhalApi开源框架的portal运营后台

PhalApi的Portal运营平台,是提供给运营团队使用的管理后台。从PhalApi 2.12.0 及以上版本提供,可以非常方便进行数据和业务上的管理。

介绍

运营平台有以下几个特点:

  • 免费使用,可放心用于商业项目开发
  • 基于layuiminiLAYUI MINI 后台管理模板和layui经典模块化前端框架开发运营平台界面,让后端开发也能轻松入手
  • 提供与后面界面配套的后台数据接口,基本不用写代码,就能实现后台数据的增删改查操作
  • 可视化运营平台安装,安装后即可使用

在我们PhalApi官方文档也要相应的详细介绍。

对于本次广告业务后台,实现的效果截图如下。大家可以访问测试环境:

http://test.h5_video_ad.yesapi.net/portal/index.html#/page/ad/index.html

账号:admin,密码:123456

编辑页效果:

登录页面:

portal快速开发步骤

从底层数据库往前端页面倒推的方式,进行以下开发(你也可以反过来,从前端页面到数据库)。

后端PHP开发部分

首先,根据业务需求,创建数据库表,例如【广告管理】功能模块,需要以下字段:

  • 广告标题
  • 广告副标题
  • 广告icon
  • 视频素材
  • 视频封面
  • 按钮名称
  • 落地页链接
  • 状态

对应的SQL语句是:

CREATE TABLE `ad` (`id` int(11) NOT NULL AUTO_INCREMENT,`ad_title` varchar(500) DEFAULT '' COMMENT '广告标题',`ad_sub_title` varchar(500) DEFAULT '' COMMENT '广告副标题',`ad_icon` varchar(500) DEFAULT '',`add_time` datetime DEFAULT NULL,`ad_status` tinyint(4) DEFAULT '1' COMMENT '状态,1正常0关闭',`video_url` varchar(500) DEFAULT '' COMMENT '视频链接',`video_img` varchar(500) DEFAULT NULL COMMENT '视频封面',`btn_title` varchar(100) DEFAULT '' COMMENT '按钮名称',`download_url` varchar(500) DEFAULT '' COMMENT '落地页',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4;

然后,为广告创建对应的Model类,新建文件:./src/portal/Model/Ad.php ,添加以下基础的PHP代码,注意你的Model子类要继承DataModel,后面会有更详情地介绍。

<?php
namespace Portal\Model;use PhalApi\Model\DataModel;class Ad extends DataModel {public function getTableName($id) {return 'ad';}
}

接下来,为广告创建Api类,添加src/portal/Api/Ad.php文件,并放入以下PHP代码。注意Api子类需要继承DataApi,并且需要重载实现getDataModel()方法,在里面返回上面实现的广告Model类。

<?php
namespace Portal\Api;use Portal\Common\DataApi as Api;class Ad extends Api {        protected function getDataModel() {return new \Portal\Model\Ad();}}

至此,针对广告这一业务单元,后端开发已完成基础性的开发。

前端开发部分

接下来,进入前端的业务开发。

首先,把前端页面的示例目录./public/portal/page/phalapi-curd-table,复制一份到 ./public/portal/page/ad目录,里面会有三个HTML文件:

  • add.html 添加页面
  • edit.html 编辑页面
  • index.html 模块首页

但这时,页面还不会显示,需要再添加左侧菜单。在【菜单管理】中,把刚才复制的页面路径,放置到 菜单链接中,即:page/ad/index.html,菜单标题为:广告管理。

刷新页面后,就可以看到菜单,并进行访问。

随后,前端只需要定制需要搜索的条件、需要展示的表格数据,以及需要调用的对应接口模块,剩下的由框架完成即可。例如模块列表首页,修改需要显示的表格数据,可以通过JS配置实现。修改./public/portal/page/ad/index.html 文件,

cols: [[{type: "checkbox", width: 50, fixed: "left"},{field: 'id', width: 80, title: 'ID', sort: true},{field: 'ad_title', minWidth: 50, title: '广告标题'},{field: 'ad_sub_title', minWidth: 50, title: '广告副标题'},{field: 'icon', minWidth: 50, align: 'center', templet: function (d) {//return '<a target="" href="/portal/page/stat/index.html?id='+d.id+'">查看统计</a>';return '<img src="'+d.ad_icon+'" height="28" alt="无法加载"/>';}, title: '广告icon', sort: false},{field: 'add_time', minWidth: 80, title: '添加时间', sort: true},{field: 'ad_status', minWidth: 50, align: 'center', templet: function (d) {if (d.ad_status == 0) {return '<span class="layui-badge layui-bg-red">关闭</span>';} else {return '<span class="layui-badge-rim">正常</span>';}}, title: '广告状态', sort: true},{field: 'id', minWidth: 50, align: 'center', templet: function (d) {//return '<a target="" href="/portal/page/stat/index.html?id='+d.id+'">查看统计</a>';return '<a target="_blank" href="/portal/index.html?id='+d.id+'#/page/stat/index.html">查看统计</a>';}, title: '统计', sort: true},{title: '操作', minWidth: 50, templet: '#currentTableBar', fixed: "right", align: "center"}]],

同时,修改指定调用的接口。

table.render({elem: '#currentTableId',url: '/?s=Portal.Ad.TableList', // 换成相应的运营平台接口

当数据库有测试数据后,刷新页面可以看到以下效果。

再调整添加数据页面的表单数据,修改./public/portal/page/ad/add.html文件,修改HTML,

<div class="layui-form layuimini-form"><div class="layui-form-item"><label class="layui-form-label required">广告标题</label><div class="layui-input-block"><input type="text" name="ad_title" lay-reqtext="广告标题不能为空" class="layui-input" lay-verify="required"></div></div><div class="layui-form-item layui-form-text"><label class="layui-form-label required">广告副标题</label><div class="layui-input-block"><input type="text" name="ad_sub_title" lay-reqtext="广告副标题不能为空" class="layui-input" lay-verify="required"></div></div><div class="layui-form-item"><label class="layui-form-label">广告icon</label><div class="layui-input-block"><button class="layui-btn"  id="uploadIcon">上传图片</button><br><img id="imgIcon" src="" alt=""><input type="hidden" name="ad_icon" value=""></div></div><div class="layui-form-item"><label class="layui-form-label">视频素材</label><div class="layui-input-block"><button class="layui-btn"  id="uploadVideo">上传视频</button><input type="text" name="video_url" class="layui-input" value=""></div></div><div class="layui-form-item"><label class="layui-form-label">视频封面</label><div class="layui-input-block"><button class="layui-btn"  id="uploadVideoImg">上传图片</button><br><img id="imgVideo" src="" alt=""><input type="hidden" name="video_img" value=""></div></div><div class="layui-form-item"><label class="layui-form-label">按钮名称</label><div class="layui-input-block"><input type="text" name="btn_title" value="" class="layui-input"></div></div><div class="layui-form-item"><label class="layui-form-label">落地页链接</label><div class="layui-input-block"><input type="text" name="download_url" value="" class="layui-input"></div></div><div class="layui-form-item"><label class="layui-form-label">状态</label><div class="layui-input-block"><input type="radio" name="ad_status" value="1" checked title="正常" ><input type="radio" name="ad_status" value="0" title="关闭" ></div></div><div class="layui-form-item"><div class="layui-input-block"><button class="layui-btn" lay-submit lay-filter="saveBtn">添加广告</button></div></div>
</div>

刷新后,添加广告的页面效果如下,

别忘了同步修改保存接口的地址,

upload.render({elem: '#uploadIcon',url: '/?s=Portal.Ad.upload' //必填项

到这里,添加广告的功能就实现了。编辑功能类似,由于还有文件上传的部分,所以还需要一些额外的代码开发。

以此类推,可以继续快速开发其他菜单模块,例如剩下的还有密钥管理、报表统计等。

PhalApi开源框架的DataModel数据模型介绍

为了进一步减少数据库操作的代码开发量,避免在开发者在Model子类重复编写代码实现基本的数据库操作。从PhalApi 2.12.0 及以上版本起,我们提供了PhalApi\Model\DataModel数据库数据基类。

如果你是初次使用PhalApi框架,建议在项目开发过程中全部的Model子类都继承于此PhalApi\Model\DataModel基类;如果你已经使用PhalApi框架开发有段时间,那么在新的Model或原有的Model子类也可以把原来继承于PhalApi\Model\NotORMModel基类调整成PhalApi\Model\DataModel,可能的影响是会存在函数名冲突。

使用DataModel前后的继承关系对比如下:

而最大的区别是,DataModel直接提供了对外可用的数据库操作接口,是开放式的;而NotORMModel是封闭式的,很多数据库操作都需要在NotORMModel内部先实现再提供编写好的接口给外部调用。

一键生成DataModel源代码

如果项目本来已经有数据库表,或者新项目时设计好了一批数据库表,这时,可以使用脚本./bin/phalapi_build_data_model.php迅速一键生成全部的DataModel源代码。

这将能极大提升开发的效率。

PhalApi开源框架的DataApi通用数据接口介绍

为了进一步实现接口低代码编程,为了能以更少的代码,实现更多的接口,满足更广业务需求,PhalApi结合多年的接口系统和项目开发经验,从PhalApi 2.13.0 版本起推出PhalApi\Api\DataApi通用数据接口。

它的特色在于,可以针对单个数据库表提供一套完整的、常用的、基本的数据接口,以自动完成对数据库表的CURD基本操作,避免重复接口开发。

DataApi有哪些接口?

如果需要实现对数据库表的数据管理,进行常见的增删改查操作,那么可以让你的Api接口类直接继承PhalApi\Api\DataApi基类。继承后便可自动拥有一套基本的数据接口。

目前有5个数据接口(后面会进一步扩展):

  • 创建新数据,{命名空间}.{接口类名}.CreateData
  • 批量删除,{命名空间}.{接口类名}.DeleteDataIDs
  • 获取一条数据,{命名空间}.{接口类名}.GetData
  • 获取表格列表数据,{命名空间}.{接口类名}.TableList
  • 更新数据,{命名空间}.{接口类名}.UpdateData

结合的力量,1+1 > 2

当我们把DataModel和DataApi相合时,就能快速完成后端的接口开发;当我们使用portal的HTML页面模板时,就能快速完成前端的基本开发;当我们把后端和前端进行结合时,在平时项目需求开发时,就能更快速地实现需要的功能和菜单模块。实现 1加1,大于2的效果。

如果需要进一步了解PhalApi开源框架的相关内容,可以查看官方文档,链接:http://docs.phalapi.net/#/v2.0/tutorial

做一个广告业务后台需要几天,5天吗?不,用PhalApi开源框架,1天就能做好相关推荐

  1. Asp.NetMVC利用LigerUI搭建一个简单的后台管理详解(函登录验证)

    上一篇 Asp.Net 中Grid详解两种方法使用LigerUI加载数据库数据填充数据分页 了解了LigerUI 中Grid的基本用法  现在结合上一篇的内容做一个简单的后台管理,当然也有前台的页面. ...

  2. 如何用极致业务基础平台做一个通用企业ERP系列之三启用期间管理设计

    接着篇幅2,我们现在要该设计一个启用期间管理了,启用期间管理,主要为方便管理,比如一些历史的单据,不允许他反审核去修改,作假.也不允许操作者在录入以前历史的单据. 期间管理我们框架提供了一个期间表,这 ...

  3. python制作别人能使用的类_最近的工作,用python做一个微信的消息类的后台类的应用...

    最近的工作是给微信做一个消息类的后台类的应用. 消息类的后台类的应用的意思就是,这个应用不需要界面,不需要美工,也不需要客户端.它只是微信的一个普通账号.你可以加这个账号为好友.然后你可以和这个账号聊 ...

  4. php怎么banner指定超链接,巧用图片链接模块做banner广告图片,后台可更换图片

    banner广告图片客户要自己更换怎么办,我们可以巧用图片链接模块做banner广告图片,让客户自己来更换banner广告图片.之前我 做过一个简单实现广告图片后台更换教程,是用产品模块来实现的,拖拖 ...

  5. 如何用极致业务基础平台做一个通用企业ERP系列之二一览表培训

    接着上一篇博客,我们进行往来单位一览表设计如下: 可以看到我们设计的时候,将客户和供应商用两个字段来解决,这样基本可以解决那些往来单位有可能即是供应商又是客户的情况.当然因为这里不是主要做客户关系管理 ...

  6. 5分钟教你做一个WebView广告过滤器

    先来看看效果 这站做的好,满满的广告,许多浏览器都有广告屏蔽功能,实现方式也各不相同,今天我们就来实战下怎么样把这些烦人的广告都干掉. 这里讲的是webview里面的广告,所以我们从网页来分析这个页面 ...

  7. 简单说 如何做一个chrome 去广告插件

    说明 Chrome插件又称为谷歌浏览器插件,是谷歌Chrome浏览器的扩展插件,使用Chrome插件可以为Chrome浏览器带来一些功能性的扩展,进而提高Chrome的使用体验. 这次我们先来简单接触 ...

  8. 在微信平台上做一个公众号,业务序列图

    Simplicity(191**17) 2018-06-10 10:03:49 Simplicity(191**17) 2018-06-10 10:05:49 请教:这个图表示 经销商向厂家下达采购订 ...

  9. 一个用来获取头条广告投放后台数据的组件

    一个用来获取头条广告投放后台数据的组件 JWatchDog功能 JWatchDog自带介绍 JWatchDog 使用方法 获取一个Selenium浏览器驱动实例 打开巨量引擎登录页面 使用内置的日志记 ...

最新文章

  1. 上海交大张拳石:漂在零丁洋里的体系,神经网络的博弈交互解释性
  2. 运维杂记(二):打印机print spooler服务自动关闭
  3. C++抽象基类和纯虚成员函数
  4. CentOS 7.6 MySQL 8.0 RPM包方式安装及新特性介绍
  5. 分享到facebook链接原格式_神马?!你还不知道Facebook广告怎么操作?
  6. 【简便代码】1063 计算谱半径 (20分)_10行代码AC
  7. 开发者基础知识游戏,共10关,欢迎挑战
  8. DML风格的批量更新/删除
  9. 2015年创业中遇到的技术问题:41-50
  10. leetcode84. 柱状图中最大的矩形
  11. linkscrpit
  12. ExpandableListView实现组内单选,组间多选功能
  13. 《Puppet权威指南》——第1章 运维工程师的利器——自动化运维工具
  14. hmcl手机版_hmcl启动器整合包安卓版下载-我的世界hmcl启动器安卓版v1.17.10最新版_新绿资源网...
  15. 阿里云国际站服务器怎么样
  16. 手机app推广渠道的安装来源追踪与归因
  17. 用Python实现简易超市售货系统
  18. ALS算法原理和在音乐推荐上的应用
  19. 一个简单的ASP登录页面
  20. 【转】调优方法——warmup

热门文章

  1. 国家中小学网络平台爬虫项目
  2. Cisco Vpn的安装过程
  3. 网络编程套接字编程-代码实现-复习总结
  4. [Vulkan教程]绘制一个三角形/呈现/交换链(Swip chain)
  5. 手游传奇有挂吗_传奇手游辅助工具
  6. modalpopup控件使用时的pannel设置问题
  7. BeanUtils.populate的作用
  8. BeanUtils.populate(Object Bean,Map properties)
  9. 数据结构——什么是数据结构?
  10. 鸿蒙系统主页面斜纹,《中国美术欣赏》[精选].doc