一般来说二次开发,多数就是修改界面和增加功能这两个需求
先说修改界面
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 ,这就是控制器的业务逻辑
简单的看下代码
<span>class</span> show_groupbuyControl <span>extends</span><span> BaseHomeControl { </span>...<span> } </span>
控制器的名称跟一个 Control 字符串并继承于 BaseHomeControl
而 op 就是 show_groupbuyControl 类中的函数
<span>/*</span><span>* * 默认跳转到进行中的团购列表 </span><span>*/</span> <span>public</span> <span>function</span><span> indexOp() { </span><span>$this</span>-><span>groupbuy_listOp(); }</span>
命名以 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 。
找到了视图文件,就需要找到对应的数据显示模块才可以修改。
我们先返回找到对应的控制器看下代码,我们找到首页文件,以团购为例
<span>//</span><span>团购专区</span> Language::read('member_groupbuy'<span>); </span><span>$model_groupbuy</span> = Model('groupbuy'<span>); </span><span>$group_list</span> = <span>$model_groupbuy</span>->getGroupbuyCommendedList(<span>array</span>(), <span>null</span>, '', '*', 4<span>); Tpl</span>::output('group_list', <span>$group_list</span>);
除去注释的第一句,不用看也能猜出来,是调用语言文件的
第二句是调用 model 的,model 的位置在上层目录中的 data 里,而 model 文件的文件名就是 Model('groupbuy'); 中的 groupbuy 加上 .php 后缀
第三句调用 model 中的函数获取想要取得的数据
第四句则是将已取得的数据赋值给模板中的变量 group_list
我们打开视图文件,找到 group_list 即可定位模板中要找的位置了,而模板都是纯 php 语法,直接就可以修改,记得要备份啊!