您好,请问我不重写模块下的block,想新增一个,好像没看到这方面的介绍,请问怎么新增呢?
fecshop帮助文档有:
http://www.fecshop.com/doc/fecshop-guide/instructions/cn-1.0/guide-fecshop_hand_local_module.html
我不是新建一个模块,只是在原来已经存在的模块二次开发,在原来的模块下新增一个Controller或一个block,并不想重写整个模块,看到的都是介绍怎么重写原来模块的东西,没看到在原来的模块下新建东西在哪配置?麻烦帮忙看一下,谢谢!
1.重写有很多种,可以重写整个模块,也可以只重写某个文件,譬如controller block 重写
2.新附加的功能,做一个新模块即可
3.上面的文档,给予的是一个方式和思路,而且文档给的很全,玩fecshop要有自己的能力, 举一反三,自己去梳理代码和文档,本人能给的就这么多。
@ggjd #2楼 原有模块下新增一个controller,先去此模块的配置文件中使用controllerMap进行指向新增的控制器,顺道继承。但我发现已有模块新增block(不是重写),必须要重写Module,得到新的命名空间,不然找不到新的block,但重写了Module话,原有block就找不到了,也必须复制重写,这就很有点麻烦啊。。。
不需要的,在controller继承的基类:https://github.com/fecshop/yii2_fecshop/blob/master/app/appfront/modules/AppfrontController.php
public $blockNamespace; /** * @param $blockName | String * get current block * 这个函数的controller中得到block文件,譬如: * cms模块的ArticleController的actinIndex()方法中使用$this->getBlock()->getLastData()方法, * 对应的是cms/block/article/Index.php里面的getLastData(), * 也就是说,这个block文件路径和controller的路径有一定的对应关系 * 这个思想来自于magento的block。 */ public function getBlock($blockName = '') { if (!$blockName) { $blockName = $this->action->id; } if (!$this->blockNamespace) { $this->blockNamespace = Yii::$app->controller->module->blockNamespace; } if (!$this->blockNamespace) { throw new \yii\web\HttpException(406, 'blockNamespace is empty , you should config it in module->blockNamespace or controller blockNamespace '); } $viewId = $this->id; $viewId = str_replace('/', '\\', $viewId); $relativeFile = '\\'.$this->blockNamespace; $relativeFile .= '\\'.$viewId.'\\'.ucfirst($blockName); //查找是否在rewriteMap中存在重写 $relativeFile = Yii::mapGetName($relativeFile); return new $relativeFile(); }
可以看到类变量blockNamespace,这个就是用来设置查找block文件的,如果不填写,那么默认使用的是当前modules的文件路径,您可以设置这个类变量的值。
blockNamespace
譬如:
public $blockNamespace = 'fbbcbase\\app\\appadmin\\modules\\Sales\\block';
然后再这个namespaces对应的文件路径中添加block即可
block
@Fecshop #5楼 谢谢,明白了。