http://bbs.phpchina.com/thread-266939-1-1.html
我们首先了解一下ShopNC商城的主要目录:
/ 根目录
/admin 后台目录(目录名可更改)
/api API文件目录,存放ucenter、PHPWind、QQ互联、新浪微博、支付方式(支付宝,财付通、预存款等)和商品等API文件
/cache 缓存文件目录
/control 控制器目录
/data 常用公共数据(地区、发言表情等)
/framework 核心框架目录
/install 安装程序目录
/language 语言包目录
/model 模型文件目录
/resource 资源目录(字体、JS文件、HTML编辑器、验证码用字体图片、二维码依赖文件等)
/templates 模板文件目录
/templdate/default 默认的模板风格
/upload 附件目录(商品图、店铺认证、会员头像、促销活动图等上传的所有图片)
ShopNC商城系统采用MVC模式,控制器文件位于control目录,模型文件位于model目录,视图文件位于templates目录,系统框架依据act和op参数(GET/POST过来的)完成控制器调度。
控制器类文件名一般为业务名称,类名称一般为 “业务名称+Control”,例如品牌控制器(control/brand.php)类名为brandControl。
模型类文件名一般为“表名称+.model”,类名称“表名+Model”,例如广告模型(model/adv.mode.php)类名称为advModel。
跟据商城业务需要,系统内置三个控制器父级类,BaseHomeControl、BaseMemberControl和BaseMemberStoreControl分别适用于前台展示、会员中心、店铺中心三类控制器。
下面为品牌控制器的部分代码,品牌展示需要继承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(){ /** * 内容略... */ } } ?>
控制器跟据URL的op参数来调用相应的方法,
访问http://<siteurl>/index.php?act=brand
将会执行 brandControl类的indexOp方法。
访问http://<siteurl>/index.php?act=brand&op=search
将会执行brandControl类的searchOp方法。
indexOp与searchOp必须为公有方法(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方法是创建一个空模型对象,table和select方法是ShopNC商城系统内置的方法,table用来指定要操作的数据表,select方法完成查询操作并将结果以数组形式返回,查看商城系统模型内置的所有方法可查登录ShopNC官网http://www.shopnc.net查看。
Tpl::output('brand_list',$brand_list) 完成向模板抛出内容。
Tpl是商城系统的视图类,完成控制器和视图之间的数组传输。
继续往下看
继续往下看
Model('seo')->type('brand')->show() 的作用为设置品牌展示页面的SEO信息,包括 title、keyword和description,这些信息在系统后台 设置 > SEO设置中,可以进行自由设置。系统除了支持品牌页面SEO,还可以对首页、团购、优惠券、积分商城、文章类信息、店铺展示页、商品展示页及商品分类页进行SEO自行设置,设置完成后再将原来有SEO缓存清除即可。
上面所有的业务工作都已经完成,最后由Tpl::showpage('brand')来加载模板页面并显示, showpage方法完成brand模板的加载,Brand模板的位置是/templates/default/home/brand.php,ShopNC商城未采用专有的模板语言,而是采用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 }?>