shopnc二次开发(二),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 语法,直接就可以修改,记得要备份啊!

09-19 05:29