• ShopNC 商城系统开发经验分享第二篇:ShopNC商城系统初步分析


    http://bbs.phpchina.com/thread-266939-1-1.html

      我们首先了解一下ShopNC商城的主要目录:


    / 根目录
    /admin 后台目录(目录名可更改)
    /api  API文件目录,存放ucenterPHPWindQQ互联、新浪微博、支付方式(支付宝,财付通、预存款等)和商品等API文件
    /cache 缓存文件目录
    /control 控制器目录
    /data 常用公共数据(地区、发言表情等)
    /framework 核心框架目录
    /install 安装程序目录
    /language 语言包目录
    /model 模型文件目录
    /resource 资源目录(字体、JS文件、HTML编辑器、验证码用字体图片、二维码依赖文件等)
    /templates 模板文件目录
    /templdate/default 默认的模板风格
    /upload 附件目录(商品图、店铺认证、会员头像、促销活动图等上传的所有图片)

          ShopNC商城系统采用MVC模式,控制器文件位于control目录,模型文件位于model目录,视图文件位于templates目录,系统框架依据actop参数(GET/POST过来的)完成控制器调度。
    控制器类文件名一般为业务名称,类名称一般为 “业务名称+Control”,例如品牌控制器(control/brand.php)类名为brandControl
    模型类文件名一般为“表名称+.model,类名称“表名+Model”,例如广告模型(model/adv.mode.php)类名称为advModel
    跟据商城业务需要,系统内置三个控制器父级类,BaseHomeControlBaseMemberControlBaseMemberStoreControl分别适用于前台展示、会员中心、店铺中心三类控制器。
     
          下面为品牌控制器的部分代码,品牌展示需要继承BaseHomeControl
    <?php
     
    defined('InShopNC') or exit('Access Invalid!');
     
    class brandControl extends BaseHomeControl {
     
             /**
     
              * 默认操作
     
              */
     
        public function indexOp(){
     
            //读取语言包
     
            Language::read('home_brand_index');
     
            //创建模型并获得品牌列表
     
            $model = Model();
     
            $brand_list = $model->table('brand')->select();
     
            //向模板抛出内容
     
            Tpl::output('brand_list',$brand_list);
     
            //输出SEO设置信息
     
            Model('seo')->type('brand')->show();
     
            //调用模板
     
            Tpl::showpage('brand');
     
        }
     
             /**
     
              * 搜索
     
              */ 
     
        public function searchOp(){
     
              /**
     
             * 内容略...
     
             */
     
        }
     
    }
     
    ?>

    控制器跟据URLop参数来调用相应的方法,

    访问http://<siteurl>/index.php?act=brand
    将会执行 brandControl类的indexOp方法。
    访问http://<siteurl>/index.php?act=brand&op=search
    将会执行brandControl类的searchOp方法。
    indexOpsearchOp必须为公有方法(public)。

    首先读取品牌语言包:Language::read('home_brand_index'),使用Language类的公有静态方法read来完成,系统自带了两种语言饭,简体中文(zh_cn)与繁体中文(zh),分别位于/language/zh_cn/language/zh目录下,语言包文件为.php格式,内容存入$lang数组中,系统默认加载简体中文语言包。系统支持添加其它语言包,如添加英文语言包,创建/language/en目录,然后将zh_cn目录内的php文件拷贝到en目录中,更改内容中的$lang数组值即可。

    然后创建模型并查询返回所有系统品牌:
    $model = Model();
    $brand_list =$model->table('brand')->select();
    Model方法是创建一个空模型对象,tableselect方法是ShopNC商城系统内置的方法,table用来指定要操作的数据表,select方法完成查询操作并将结果以数组形式返回,查看商城系统模型内置的所有方法可查登录ShopNC官网http://www.shopnc.net查看。

    Tpl::output('brand_list',$brand_list) 完成向模板抛出内容。
    Tpl是商城系统的视图类,完成控制器和视图之间的数组传输。

    继续往下看
    Model('seo')->type('brand')->show() 的作用为设置品牌展示页面的SEO信息,包括 titlekeyworddescription,这些信息在系统后台 设置 > SEO设置中,可以进行自由设置。系统除了支持品牌页面SEO,还可以对首页、团购、优惠券、积分商城、文章类信息、店铺展示页、商品展示页及商品分类页进行SEO自行设置,设置完成后再将原来有SEO缓存清除即可。

    上面所有的业务工作都已经完成,最后由Tpl::showpage('brand')来加载模板页面并显示, showpage方法完成brand模板的加载,Brand模板的位置是/templates/default/home/brand.phpShopNC商城未采用专有的模板语言,而是采用PHP格式输出内容,开发人员只需掌握PHP语言即可熟练进行模板开发,而不需要在掌握模板语法上分散精力,系统也省去了对非PHP写法重新解析的时间。
     
    brand模板文件主要代码及说明如下:
    <?php defined('InShopNC') or exit('Access Invalid!');?>
     
    <!--上面是进行合法验证,在商城系统下的模板文件都需要进行该验证。-->
     
    <?php include template('home/cur_local');?>
     
    <!--上面是在品牌展示页面显示当前位置,实际输出内容为:当前位置:首页 > 所有品牌 -->
     
    <h2><b><?php echo $lang['brand_index_brand_list'];?></b></h2>
     
    <!--上面是输出标题,实际内容为:品牌列表-->
     
    <!--$lang 数组内容为Language::read() 得到的语言包信息,-->
     
    <?php if(is_array($output['brand_list'])){?>
     
    <!--使用Tpl::output抛出到模板的内容,保存到了$output数组中,保存下标名称为output方法的第一个参数值,-->
     
    <?php foreach($output['brand_list'] as $key=>$val){?>
     
    <!--循环输出品牌内容-->
     
    <div class="wrap">
     
             <ul>
     
                 <li>
     
                 <a href="<?php echo ncUrl(array('act'=>'brand','op'=>'list','brand'=>$brand['brand_id']));?>" >
     
    <!--       生成跳转URL(伪静态或动态)-->
     
                 <span><img src="<?php echo ATTACH_BRAND.'/'.$brand['brand_pic'];?>" alt="<?php echo $brand['brand_name'];?>" /></span>
     
                 </a>
     
                 </li>
     
             </ul>
     
    </div>
     
    <?php }?>
     
    <?php }?>
  • 相关阅读:
    [BJDCTF 2nd]fake google
    [BJDCTF2020]Easy MD5
    [ZJCTF 2019]NiZhuanSiWei
    论剑场web21 php伪协议+反序列化
    论剑场web12 反序列化+函数绕过
    小白注入学习:sqli-labs--less17-19学习记录
    小白注入学习:sqli-labs--less11-16学习记录
    小白注入学习:sqli-labs--less9-10学习记录
    小白注入学习:sqli-labs--less8学习记录
    小白注入学习:sqli-labs--less7学习记录
  • 原文地址:https://www.cnblogs.com/gzmg/p/3480009.html
Copyright © 2020-2023  润新知