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 }?>
原文地址:https://www.cnblogs.com/gzmg/p/3480009.html