shopnc二次开发(二)
一般来说二次开发,多数就是修改界面和增加功能这两个需求
先说修改界面
mvc 架构的程序,在界面这里,基本就是调用数据。
常见的界面数据构架有三种
1.是业务端或者是控制端数据驱动界面,基本上是后台输出啥数据,界面表现啥数据。这样麻烦的地方在于如果要更换模板的话动刀会动的比较大,除非没有更换模板的需求。如果不修改控制端的数据的话,那么界面设计这里受到的限制就比较多。
2.是界面驱动数据,界面自定义调用数据,多数的 cms 基本都是这样搞的,通过标签或者定义个通用的 php 调用数据函数来获取数据。这样对界面设计这里比较友好,但是切图套代码的话就会比较麻烦些。
3.第三种难度有点大,就是后台通过所见即所得的模式,定义前端调用模块,并通过系统配置或者手动配置来定义数据,然后生成 html 数据,前台一次性读取即可,设定合理缓存的间隔即可。像淘宝,shopex就是这样的模式,对后台开发的压力比较大。
shopnc的程序属于第一种,后台数据驱动界面的。所以要改界面,通常要改控制器和视图两个地方,最好是记录好修改的文件,否则将来升级了,源文件被替换了,就会非常麻烦。
shopnc的url通常是这样的
http://localhost/shopnc/shop/index.php?act=show_groupbuy&op=index
act 参数代表的是控制器,而 op 则代表的是控制器中的业务函数名称
回顾下 shopnc 的目录结构,我们到控制器目录中寻找 show_groupbuy.php ,这就是控制器的业务逻辑
简单的看下代码
class show_groupbuyControl extends BaseHomeControl {
...
}
控制器的名称跟一个 Control 字符串并继承于 BaseHomeControl
而 op 就是 show_groupbuyControl 类中的函数
/**
* 默认跳转到进行中的团购列表
*/
public function indexOp() {
$this->groupbuy_listOp();
}
命名以 url 中的 op 参数加 Op 字符串组合而成
如果要更改前台显示的数据,则需要找到对应的控制器和函数,修改其中的代码
前台的模板也有规律
templates/default 目录下的文件夹功能含义如下:
buy 购买功能模板,比如购物车、订单等模板
css 样式文件夹
home 前台展示功能模块的模板都在这里
images 模板图片文件夹
layout 布局文件夹,如果要找各个功能区的头文件都在这里
member 会员中心模板
seller 卖家中心模板
sns sns 功能模板
store 卖家店铺模板
到对应的文件夹中寻找相关的文件模板即可修改视图逻辑
刚开始找对应视图可能有点蒙,因为视图和控制器并不对应,不过从 op 参数上判断也比较好找,当然还是建议从控制器代码中找
找到对应 op 函数
在函数最后末尾,找到类似 Tpl::showpage('index'); 的字样,有这样的字样就代表从对应的文件夹中调用 index 的视图,所以我们找到 index.php 就是对应的视图文件了
如果没有 Tpl::showpage('index'); 的字样,通常是调用了其他函数或者不输出视图文件,比如说直接输出字符串或者输出 json 。
找到了视图文件,就需要找到对应的数据显示模块才可以修改。
我们先返回找到对应的控制器看下代码,我们找到首页文件,以团购为例
//团购专区
Language::read('member_groupbuy');
$model_groupbuy = Model('groupbuy');
$group_list = $model_groupbuy->getGroupbuyCommendedList(array(), null, '', '*', 4);
Tpl::output('group_list', $group_list);
除去注释的第一句,不用看也能猜出来,是调用语言文件的
第二句是调用 model 的,model 的位置在上层目录中的 data 里,而 model 文件的文件名就是 Model('groupbuy'); 中的 groupbuy 加上 .php 后缀
第三句调用 model 中的函数获取想要取得的数据
第四句则是将已取得的数据赋值给模板中的变量 group_list
我们打开视图文件,找到 group_list 即可定位模板中要找的位置了,而模板都是纯 php 语法,直接就可以修改,记得要备份啊!
shopnc二次开发(二)的更多相关文章
- Linux基于webRTC的二次开发(二) 实现远程桌面共享
webRTC中的desktop_capture模块提供了捕获桌面和捕获窗口的相关功能,而实现远程桌面共享功能需要将desktop_capture捕获的画面作为peerconnection的视频源,下面 ...
- EasyDSS点播与直播服务器软件-二次开发接口对接说明示列
EasyDSS流媒体服务器软件,提供一站式的转码.点播.直播.时移回放服务,极大地简化了开发和集成的工作.其中,点播版本主要包含:上传.转码.分发.直播版本,主要包含:直播.录像, 直播支持RTMP输 ...
- EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器软件二次开发接口对接说明示列
EasyDSS相关功能 EasyDSS流媒体服务器软件,提供一站式的转码.点播.直播.时移回放服务,极大地简化了开发和集成的工作.其中,点播版本主要包含:上传.转码.分发.直播版本主要包含:直播.录像 ...
- Jmeter二次开发——基于Java请求
简述 这近几年,越来越多非http的协议需要进行性能测试,包括不仅限于各类rpc.mq.缓存等.对于这些协议,市面上可能没有现成的工具可以直接使用,这个时候,我们可以自己动手,通过编写相应的JavaS ...
- shopnc二次开发(一)
---恢复内容开始--- 以前没有怎么接触过shopnc,感觉界面挺漂亮的,不过后来自己需要开发一个电商系统,就顺便参考了下,感觉构架垃圾的一塌糊涂.不过平时做这个系统二次开发的业务比较多,所以简单的 ...
- Navisworks API 简单二次开发 (自定义工具条)
在Navisworks软件运行的时候界面右侧有个工具条.比较方便.但是在二次开发的时候我不知道在Api那里调用.如果有网友知道请告诉我.谢谢. 我用就自己设置一个工具.界面比较丑!没有美工. 代码: ...
- [连载]《C#通讯(串口和网络)框架的设计与实现》- 12.二次开发及应用
目 录 第十二章 二次开发及应用... 2 12.1 项目配制... 3 12.2 引用相关组件... 4 12.3 构建主程序... 5 ...
- OBS-Studio二次开发记录
OBS-Studio 是一款跨平台的,开源的视频直播客户端软件. 公司需要对他进行二次开发,开发的目的是使用它的录屏功能. 开发的要求是:定制全新的界面,所见即所得,window系统兼容要好. 开发步 ...
- 小猪cms微信二次开发之怎样分页
$db=D('Classify'); $zid=$db->where(array('id'=>$this->_GET('fid'),'token'=>$this->tok ...
随机推荐
- nyoj 76 超级台阶
点击打开链接 超级台阶 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第m级,共有多少走法? 注:规 ...
- ZooKeeper3.4.6配置
添加环境变量 #ZooKeeper VARIABLES START export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.6 export PATH=$PATH ...
- Chapter Schema
Chapter Schema Schema是XF的核心,每一个读写方法都有一个相关联的Schema.方法首先解析Schema,然后再根据Schema的配置的执行. 那Schema是什么呢?Schema ...
- openssl rsa 私钥 PKCS8私钥 公钥
上文配置好 openssl 运行 => cmd => cd C:\usr\local\ssl\bin => 执行 openssl
- python 调用内部类的两种方法
class Car:#外部类 class Door:#内部类 def open(self): print('open door') class Wheel: def run(self): print( ...
- 基于RBAC模型的通用企业权限管理系统
1. 为什么我们需要基于RBAC模型的通用企业权限管理系统 管理信息系统是一个复杂的人机交互系统,其中每个具体环节都可能受到安全威胁.构建强健的权限管理系统,保证管理信息系统的安全性是十分重要的.权限 ...
- Prim算法POJ1258
http://poj.org/problem?id=1258 这道题是最简单的一个啦,,,, #include<stdio.h> #include<iostream> #inc ...
- 重拾HTML(一)
一.网页组成 HTML:网页的具体内容和结构,由N个标签(节点,元素,标记)组成 CSS:网页的样式,美化网页 JavaScript:网页的交互效果,比如用户鼠标的点击事件作出响应 二.常见的HT ...
- js时间冒泡,阻止事件冒泡
首先解释一下事件冒泡神什么, 在js中,假如在div中嵌套一个div 如 <style type="text/css"> #box1{width:500px;heigh ...
- Are Landing Pages Killing Your Conversion Rate?
http://searchenginewatch.com/sew/how-to/2411253/are-landing-pages-killing-your-conversion-rate