• shopnc学习


    ---恢复内容开始---

    以前没有怎么接触过shopnc,感觉界面挺漂亮的,不过后来自己需要开发一个电商系统,就顺便参考了下,感觉构架垃圾的一塌糊涂。不过平时做这个系统二次开发的业务比较多,所以简单的总结下。

    shopnc有三款产品,b2b2c,c2c和o2o,用的同一个mvc框架和相同的开发规范,所以了解了其中一个,其他两款产品也就算理解了。

    shopnc使用的自己开发的mvc框架,粗略的看了下,还是比较简单的。

    先从文件结构说起

    ├─admin
    │ ├─config
    │ ├─control
    │ ├─framework
    │ │ └─libraries
    │ ├─include
    │ ├─language
    │ │ ├─zh
    │ │ └─zh_cn
    │ └─templates
    │ └─default
    │ ├─css
    │ │ └─font
    │ │ └─font-awesome
    │ │ ├─css
    │ │ └─font
    │ ├─images
    │ │ ├─login
    │ │ ├─mac
    │ │ ├─member
    │ │ └─sky
    │ └─layout
    ├─chat
    │ ├─config
    │ ├─control
    │ ├─language
    │ │ └─zh_cn
    │ ├─resource
    │ │ └─js
    │ └─templates
    │ └─default
    │ ├─css
    │ └─images
    ├─circle
    │ ├─config
    │ ├─control
    │ ├─framework
    │ │ ├─function
    │ │ └─libraries
    │ ├─language
    │ │ ├─zh
    │ │ └─zh_cn
    │ ├─model
    │ ├─resource
    │ │ └─js
    │ │ └─miniditor
    │ └─templates
    │ └─default
    │ ├─css
    │ ├─images
    │ │ ├─member-card
    │ │ ├─shareicon
    │ │ └─smilier
    │ └─layout
    ├─cms
    │ ├─config
    │ ├─control
    │ ├─framework
    │ │ ├─function
    │ │ └─libraries
    │ ├─language
    │ │ └─zh_cn
    │ ├─model
    │ ├─resource
    │ │ └─js
    │ └─templates
    │ └─default
    │ ├─css
    │ ├─images
    │ │ ├─attitude
    │ │ ├─dialog
    │ │ └─shareicon
    │ └─layout
    ├─core
    │ ├─framework
    │ │ ├─cache
    │ │ ├─core
    │ │ ├─db
    │ │ ├─function
    │ │ └─libraries
    │ └─language
    ├─data
    │ ├─api
    │ │ ├─snsapi
    │ │ │ ├─qqweibo
    │ │ │ ├─qqzone
    │ │ │ │ ├─comm
    │ │ │ │ ├─oauth
    │ │ │ │ ├─share
    │ │ │ │ └─user
    │ │ │ └─sinaweibo
    │ │ ├─taobao
    │ │ │ └─request
    │ │ └─xs
    │ │ ├─app
    │ │ ├─lib
    │ │ └─util
    │ │ └─skel
    │ │ ├─css
    │ │ └─img
    │ ├─area
    │ ├─cache
    │ │ ├─adv
    │ │ ├─fields
    │ │ ├─index
    │ │ ├─rec_position
    │ │ └─tpl
    │ ├─config
    │ ├─crontab
    │ │ └─include
    │ ├─log
    │ ├─model
    │ ├─resource
    │ │ ├─examples
    │ │ ├─font
    │ │ ├─highcharts
    │ │ ├─js
    │ │ │ ├─ajaxfileupload
    │ │ │ ├─cms
    │ │ │ ├─colorpicker
    │ │ │ ├─dialog
    │ │ │ │ └─images
    │ │ │ ├─fileupload
    │ │ │ ├─jcarousel
    │ │ │ │ └─skins
    │ │ │ │ ├─ie7
    │ │ │ │ ├─personal
    │ │ │ │ └─tango
    │ │ │ ├─jquery-ui
    │ │ │ │ ├─i18n
    │ │ │ │ └─themes
    │ │ │ │ ├─smoothness
    │ │ │ │ │ └─images
    │ │ │ │ └─ui-lightness
    │ │ │ │ └─images
    │ │ │ ├─jquery-ui-timepicker-addon
    │ │ │ ├─jquery.imgareaselect
    │ │ │ ├─jquery.Jcrop
    │ │ │ ├─jquery.nyroModal
    │ │ │ │ ├─img
    │ │ │ │ └─styles
    │ │ │ ├─jquery.raty
    │ │ │ │ └─img
    │ │ │ ├─map
    │ │ │ ├─qtip
    │ │ │ ├─slidesjs
    │ │ │ └─smilies
    │ │ │ └─images
    │ │ ├─kindeditor
    │ │ │ ├─attached
    │ │ │ ├─lang
    │ │ │ ├─php
    │ │ │ ├─plugins
    │ │ │ │ ├─anchor
    │ │ │ │ ├─autoheight
    │ │ │ │ ├─baidumap
    │ │ │ │ ├─clearhtml
    │ │ │ │ ├─code
    │ │ │ │ ├─emoticons
    │ │ │ │ │ └─images
    │ │ │ │ ├─filemanager
    │ │ │ │ │ └─images
    │ │ │ │ ├─flash
    │ │ │ │ ├─image
    │ │ │ │ │ └─images
    │ │ │ │ ├─insertfile
    │ │ │ │ ├─lineheight
    │ │ │ │ ├─link
    │ │ │ │ ├─map
    │ │ │ │ ├─media
    │ │ │ │ ├─multiimage
    │ │ │ │ │ └─images
    │ │ │ │ ├─pagebreak
    │ │ │ │ ├─plainpaste
    │ │ │ │ ├─preview
    │ │ │ │ ├─quickformat
    │ │ │ │ ├─table
    │ │ │ │ ├─template
    │ │ │ │ │ └─html
    │ │ │ │ └─wordpaste
    │ │ │ └─themes
    │ │ │ ├─common
    │ │ │ ├─default
    │ │ │ ├─qq
    │ │ │ └─simple
    │ │ ├─phpqrcode
    │ │ │ ├─bindings
    │ │ │ │ └─tcpdf
    │ │ │ ├─cache
    │ │ │ │ ├─mask_0
    │ │ │ │ ├─mask_1
    │ │ │ │ ├─mask_2
    │ │ │ │ ├─mask_3
    │ │ │ │ ├─mask_4
    │ │ │ │ ├─mask_5
    │ │ │ │ ├─mask_6
    │ │ │ │ └─mask_7
    │ │ │ ├─temp
    │ │ │ └─tools
    │ │ ├─seccode
    │ │ │ ├─font
    │ │ │ │ ├─ch
    │ │ │ │ └─en
    │ │ │ └─gif
    │ │ │ └─ShopNC
    │ │ └─web_config
    │ ├─session
    │ ├─smilies
    │ └─upload
    │ ├─circle
    │ │ └─group
    │ ├─cms
    │ │ ├─article
    │ │ └─index_html
    │ ├─microshop
    │ └─shop
    │ ├─activity
    │ ├─adv
    │ ├─article
    │ ├─auth
    │ ├─avatar
    │ ├─brand
    │ ├─common
    │ ├─complain
    │ ├─editor
    │ ├─groupbuy
    │ │ └─1
    │ ├─inform
    │ ├─login
    │ ├─member
    │ ├─membertag
    │ ├─mobile
    │ │ ├─ad
    │ │ └─category
    │ ├─pointprod
    │ ├─rec_position
    │ ├─store
    │ │ ├─1
    │ │ ├─2
    │ │ ├─goods
    │ │ │ ├─1
    │ │ │ └─2
    │ │ └─slide
    │ ├─store_joinin
    │ ├─voucher
    │ └─watermark
    ├─microshop
    │ ├─config
    │ ├─control
    │ ├─framework
    │ │ ├─function
    │ │ └─libraries
    │ ├─language
    │ │ └─zh_cn
    │ ├─model
    │ ├─resource
    │ │ └─js
    │ │ ├─fileupload
    │ │ ├─jcarousel
    │ │ │ └─skins
    │ │ │ └─personal
    │ │ └─smilies
    │ │ └─images
    │ └─templates
    │ └─default
    │ ├─css
    │ ├─images
    │ │ ├─dialog
    │ │ ├─ie6
    │ │ ├─index-temp
    │ │ ├─member-card
    │ │ └─shareicon
    │ └─layout
    ├─mobile
    │ ├─api
    │ │ └─payment
    │ │ └─alipay
    │ │ ├─images
    │ │ ├─key
    │ │ └─lib
    │ ├─config
    │ ├─control
    │ ├─framework
    │ │ └─function
    │ ├─language
    │ │ └─zh_cn
    │ ├─model
    │ ├─readme
    │ │ ├─api_files
    │ │ └─sql
    │ └─templates
    │ └─default
    │ └─layout
    ├─shop
    │ ├─api
    │ │ ├─payment
    │ │ │ ├─alipay
    │ │ │ ├─chinabank
    │ │ │ └─tenpay
    │ │ │ └─classes
    │ │ ├─qq
    │ │ │ ├─comm
    │ │ │ ├─oauth
    │ │ │ └─user
    │ │ └─sina
    │ ├─config
    │ ├─control
    │ ├─framework
    │ │ ├─function
    │ │ └─libraries
    │ ├─install
    │ │ ├─css
    │ │ ├─data
    │ │ ├─images
    │ │ └─include
    │ ├─language
    │ │ ├─zh
    │ │ └─zh_cn
    │ ├─resource
    │ │ ├─font
    │ │ │ └─font-awesome
    │ │ │ ├─css
    │ │ │ └─font
    │ │ └─js
    │ └─templates
    │ └─default
    │ ├─buy
    │ ├─css
    │ ├─home
    │ ├─images
    │ │ ├─buy
    │ │ ├─ie6
    │ │ ├─member
    │ │ │ └─shareicon
    │ │ ├─member-card
    │ │ ├─payment
    │ │ ├─seller
    │ │ │ └─login
    │ │ ├─shop
    │ │ ├─sns
    │ │ ├─store_joinin
    │ │ └─treetable
    │ ├─layout
    │ ├─member
    │ ├─seller
    │ ├─sns
    │ │ └─style
    │ │ ├─skin01
    │ │ ├─skin02
    │ │ ├─skin03
    │ │ ├─skin04
    │ │ ├─skin05
    │ │ └─skin06
    │ └─store
    │ └─style
    │ ├─default
    │ │ └─images
    │ ├─style1
    │ │ └─images
    │ ├─style2
    │ │ └─images
    │ ├─style3
    │ │ └─images
    │ ├─style4
    │ │ └─images
    │ └─style5
    │ └─images
    └─wap
    ├─bug
    ├─css
    ├─html
    │ └─web
    │ ├─css
    │ ├─images
    │ ├─js
    │ │ └─tmpl
    │ ├─tmpl
    │ │ ├─member
    │ │ └─order
    │ └─upload
    ├─images
    ├─js
    │ └─tmpl
    ├─tmpl
    │ ├─member
    │ └─order
    └─upload

    文件夹功能如下

    admin            后台

    chat               在线im

    circle              圈子

    cms               cms文章系统

    core               公共文件

    data               数据存放

    microshop       微商城

    mobile             手机app服务端

    shop               前台

    wap                wap端

    先看前台,前台的逻辑和模板都在shop目录中,web目录中index.php会自动转向到shop目录

    shop的目录文件功能如下:

    api                     外部api调用

    config                 配置文件

    control               控制器(业务逻辑)

    framework          框架

    install                 安装文件

    language            多语言配置文件目录

    resource             素材

    templates           模板目录

    mvc 框架中的 m 在上级目录中 data/model 中,v 在当前目录 templates 中 ,而 c 就是 control 文件夹

    明白了文件夹含义,修改相对应的逻辑就比较简单了

    一般来说二次开发,多数就是修改界面和增加功能这两个需求

    先说修改界面

    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 语法,直接就可以修改,记得要备份啊!

  • 相关阅读:
    windows 环境下在anaconda 3中安装python2和python3两个环境(python2和python3共存)
    python 中,如何在一个函数中调用另一个函数返回的多个值中的一个?
    Coursera 机器学习 第一周 学习笔记
    正则表达式 注释
    正则表达式 分组
    24_04SpringMVC实现文件上传及拦截器
    前端之CSS基础
    前端之html
    MySQL数据库实战之优酷
    数据库基础加练习
  • 原文地址:https://www.cnblogs.com/liuwenbohhh/p/4347273.html
Copyright © 2020-2023  润新知