1. 扩展:
fec fecadmin
2. 组件:
url,menu,category,product,cart,order,account,productReview,productSearch,cms,coupon,customerAddress,payment,shipping, email,
3.模块:
Core, Cms, Catalog(category,product), ProductSearch, ProductReview, Checkout, Payment, Account, Coupon, Currency, Cron, ImportExport, Newsletter, Sitemap, Wishlist, contacts, Report,
4.Layout
layout_1column.php
layout_2columns_left.php
layout_2columns_right.php
layout_3columns.php
Layout的content是由controller返回的数组数值,以及对应的views文件生成的html返回。
left 是由 模块里面的配置 通过UrlKey对应的Params配置,譬如modules params配置如下:
params =>[
'catalog/product/index' =>[
'left' => [
['程序体1'=>'view1'],
['程序体2'=>'view2'],
],
<pre name="code" class="html">
'right'=>[ // xxxx.... ],]
根据这个配置,也就是在catalog/product/index的时候left由上面的各个块来完成
5. 块:
['程序体1'=>'view1']
程序体 和 view 共同组成一个整体,来生成一块有
php ob 递归嵌套:
public function dd($i){
$i--;
if($i > 0){
ob_start();
echo "test".$i;
$str = ob_get_clean();
return $str.$this->dd($i);
}else{
return 22;
}
}
public function actionIndex(){
ob_start();
echo "Hellon/"; //输出
echo $this->dd(6);
ob_end_flush();//输出全部内容到浏览器
exit;
}
php 文件和view文件合并的方法:
public function renderPhpFile($_file_, $_params_ = [])
{
ob_start();
ob_implicit_flush(false);
extract($_params_, EXTR_OVERWRITE);
require($_file_);
return ob_get_clean();
}
通过上面的两个方式来生成tab块。
htmltab分为程序代码部分和html显示部分,程序代码部分通过getLastData()返回数组param,然后html部分用变量来生成动态数据,以及和自身的html,生成最终的tab html,然后被加载
总之,代码块可以看成一个独立的tab。
6 总之, 从主动权上面来看,layout 是主动权的顶级,各个不同的controller 填充conteng部分,通过urlkey对应的left right 填充对应的区域,
然后就是公用部分,譬如页面的头部和尾部。当然,各个不同的layout 可以有模块配置,让其选择不同的layout。
主动权是从前端部分Layout和配置部分config开始,也就是说,Layout 和 Config 来做主动控制,来选择对应的模块,虽然动作由模块的controller发起,但是config 可以换掉controller,action ,或者通过配置改动当前controller的行为,虽然动作由模块执行处理数据,但是政策还是由config控制,由Layout获取进而生成数据,从这里看config相当于法律法规,layout相当于统一管理的执行者,生成最终界面。
到这里可以看出来,模块,插件,组件,都是通过config文件进行控制,最终由layout调用。生成最终界面,这才是正确的系统架构思想,由于layout和config掌握在前端手里,因此,系统的升级不会带来太多的麻烦。
总之,一个好的系统,解决 系统的 二次开发 和 产品升级的矛盾(通过配置,更改文件路径), 产品自身升级的代码的问题以及数据库升级的问题(通过composer和yii2的migration解决)。让前端控制做主导,让控制反转,让使用者成为主权的统治者。
二:详细:
1. 通用,可以被其他的系统使用的部分做成扩展
1.1. fecadmin 扩展的完善,加入gii,使用文档等
1.2. fec 扩展的完善。
一些功能做成系统组件:URLRewrite,也就是说,需要配置的功能,做成组件的城市,方面以后的调用。
通过一个php后端类和一个前端view文件,生成一个tab块的功能。
2. 数据库使用migrate 各个组件,各个模块,各个扩展的migration 通过脚本进行整合到一起。
通过一个shell脚本依次执行各个migrate,完成数据的安装以及日后的升级,当然,这里包括mysql和mongodb,
3.通过fecadmin建立好后台,然后建表,做数据的维护,包括:产品,分类,用户中心,评论 ,cms page,staticblock order, cart等。这个通过appadmin加载,各个功能
做成模块的形式
然后做前端功能,从config 获取当前的 theme 和layout.php进而获取当前的layout
content由当前controller生成
left right由各个tab生成。各个tab在各个页面可以公用
做好可以二次开发更改系统的controller文件等的设定。
客户的二次开发文件路径,
统一写到app/code/local中,按照文件路径对系统的文件进行重新设定。
theme统一放到app/theme/xxxx/下面