Fecshop,本地新建modules,开发自己的功能

技术分享 · Fecmall · 于 6年前 发布 · 3897 次阅读

如果想在fec上面扩展,添加自己的功能,那么可以自己新建模块modules

下面以appfront入口,新建mytest模块的代码例子

1.新建模块的配置文件

appfront/config/fecshop_local_modules 下面新建文件Mytest.php ,里面添加代码如下:

<?php
/**
 * FecShop file.
 *
 * @link http://www.fecshop.com/
 * @copyright Copyright (c) 2016 FecShop Software LLC
 * @license http://www.fecshop.com/license/
 */
return [
    'mytest' => [
        'class' => '\appfront\local\local_modules\Mytest\Module',

    ],
];

2.新建模块mytest,上面配置文件class对应的类是模块的入口文件

建立文件:appfront/local/local_modules/Mytest/Module.php 里面的代码如下:

<?php
/**
 * FecShop file.
 *
 * @link http://www.fecshop.com/
 * @copyright Copyright (c) 2016 FecShop Software LLC
 * @license http://www.fecshop.com/license/
 */

namespace appfront\local\local_modules\Mytest;

use fecshop\app\appfront\modules\AppfrontModule;
use Yii;

/**
 * @author Terry Zhao <2358269014@qq.com>
 * @since 1.0
 */
class Module extends AppfrontModule
{
    public $blockNamespace;

    public function init()
    {
        //echo 1;exit;
        // 以下代码必须指定
        $nameSpace = __NAMESPACE__;
        // web controller
        if (Yii::$app instanceof \yii\web\Application) {
            $this->controllerNamespace = $nameSpace . '\\controllers';
            $this->blockNamespace = $nameSpace . '\\block';
        }
        Yii::$service->page->theme->layoutFile = 'main.php';
        parent::init();
    }
}

3.新建模块里的controller文件

appfront/local/local_modules/Mytest/controllers/CustomerController.php ,代码如下:

<?php
/**
 * FecShop file.
 *
 * @link http://www.fecshop.com/
 * @copyright Copyright (c) 2016 FecShop Software LLC
 * @license http://www.fecshop.com/license/
 */

namespace appfront\local\local_modules\Mytest\controllers;

use fecshop\app\appfront\modules\AppfrontController;
use Yii;
use yii\web\Response;

/**
 * @author Terry Zhao <2358269014@qq.com>
 * @since 1.0
 */
class CustomerController extends AppfrontController
{

    public function init()
    {
        parent::init();
        //Yii::$service->page->theme->layoutFile = 'category_view.php';
    }
    
    public function actionTest(){
       // echo 2;exit; 
        $data = $this->getBlock()->getLastData();
        return $this->render($this->action->id, $data);
    }
    
    
}

4.新建block文件 appfront/local/local_modules/Mytest/block/customer/Test.php , 代码内容如下:

<?php
/**
 * FecShop file.
 *
 * @link http://www.fecshop.com/
 * @copyright Copyright (c) 2016 FecShop Software LLC
 * @license http://www.fecshop.com/license/
 */

namespace appfront\local\local_modules\Mytest\block\customer;

use Yii;
use yii\base\InvalidValueException;

/**
 * @author Terry Zhao <2358269014@qq.com>
 * @since 1.0
 */
class Test
{

    public function getLastData()
    {
        
        return ['name' => 'zhangsan'];
    }
}

上面我只是简单的返回一个数组。在getLastData() 方法里面,您可以按照自己的业务逻辑实现,最终返回一个数组给controller

5.建立view文件 fecshop/appfront/theme/terry/theme01/mytest/customer/test.php

terry:模板包名 , theme01:模板名 , mytest/customer/test.php:view文件路径

内容填写如下:

<?= $name  ?>

只做了一个简单的输出,然后访问url : https://fecshop.appfront.fancyecommerce.com/mytest/customer/test 就可以看到了

对于url : mytest : 模块名字,customer : controller名字 ,test : action方法名字

到这里就完成了一个基本的模块modules。

共收到 10 条回复
Tudou#16年前 1 个赞

先不管那么多 赞一个再说。谢谢群主大大的耐心讲解。

Fecmall#26年前 0 个赞

@yaochuan #1楼 不客气

Tudou#36年前 0 个赞

@Terry #2楼 大哥,我还想再问一下。如果是后台appadmin的话module类我继承是应该继承AppadminbaseBlock还是AppadminbaseBlockEdit呢?还是继承appfrontModule类

Tudou#46年前 0 个赞

我没太弄明白前两个类的区别。

Fecmall#56年前 0 个赞

@yaochuan #3楼 打开vendor/fancyecommerce/fecshop/app/appadmin/modules/Cms 文件夹 ,这是fecshop appadmin入口的一个Cms模块,你参考这个,他继承的啥,你就继承啥。

各个入口继承的类不一样。

Fecmall#66年前 0 个赞

@yaochuan #4楼 建议,你先去学习一下yii2 modules http://www.yiichina.com/doc/guide/2.0/structure-modules

Tudou#76年前 0 个赞

好的。谢谢 麻烦了。:smirk:

Tudou#86年前 0 个赞

@Terry #6楼 很开心 搭建成功了。我跟着CMS继承的类继承,同时也使用里面的方法,创建模块文件的时候发现了一个逻辑,文件的方式是以模块名(文件夹)->block层->控制器名(文件夹)->方法(PHP文件) 创建的。谢谢谢谢。多了很多理解,带有一些成功的喜悦, 现在还有个小瑕疵就是点进进入页面的时候显示“You donot have role to visit this controller” 我明明在菜单里面添加了相应的模块/控制器/方法的URLkey。权限管理也勾选了该选项的。是其他什么地方还需要配置权限问题吗? 因为以前没做过权限相关的,所以对这方面不是太了解。

Fecmall#96年前 0 个赞

@yaochuan [#8楼](#comment8) 后台,需要为controller建立菜单,然后需要为这个菜单建立权限组,然后把当前用户加入这个权限组才能访问,参考文章:http://www.fecshop.com/topic/437

Tudou#106年前 1 个赞

测试成功了 中间出了一些纰漏, 因为是之前就创建好的菜单,然后再创建的模块,导致ROLEkey不匹配 然后重新删除该菜单之后重建的菜单文件,输入对应‘模块/控制器/方法’的urlKEY之后重新匹配,但是还是报错了, 是因为视图文件我创建的时候没有少了模块名那一层、导致报错。然后我百度翻译了一波,发现是视图文件有错误,就按其他相应模块对应创建的视图层。最后测试成功。 感谢群主大大的耐心引导。愿FECSHOP越来越好。 以下是报错信息:Exception 'yii\base\InvalidValueException' with message 'view file is not exist inE:\PHPstudy\WWW\zq\fecshop/appadmin/theme/base/default/productspread/product/spread.php,E:\PHPstudy\WWW\zq\fecshop\vendor/fancyecommerce/fecshop/app/appadmin/theme/base/default/productspread/product/spread.php' in E:\PHPstudy\WWW\zq\fecshop\vendor\fancyecommerce\fecshop\services\page\Theme.php:105 以上只是一小部分。如果看到有类似报错的朋友们可以看一下。

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
Your Site Analytics