一般来说二次开发,多数就是修改界面和增加功能这两个需求
先说修改界面
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 语法,直接就可以修改,记得要备份啊!