如何使用yii2 fecshop的小部件widget

首先需要说明的是,fecshop的小部件和yii2的不同,fecshop的小部件是由

Yii::$app->page->widget->render($configKey) 函数得到的内容

小部件的介绍:相当于个独立功能块,有2部分组成,1. 数据提供者block,2. view部分,view部分是html内容,一些动态数据需要从block中获取,通过数据提供部分和数据显示部分组成一个独立块。

小部件的功能:在电商网站,或者其他网站,我们会有一些块,在很多页面显示,譬如newsletter,rss,product view history等,可能在产品页面侧栏,分类页面搜索页侧栏面,账户中心侧栏等页面显示这个快,因此我引入了小部件的功能,通过配置直接添加,比较方面。

小部件实现的原理:分为3块,1.view文件和多模板路径,通过优先级依次匹配,直到文件存在,返回viewFile 。2. 通过配置里面的类以及方法,得到动态数据,数据格式为数组,3.通过view组件的renderFile函数,把view的路径和动态参数param,画出来最终的html。

小部件的使用:

1.添加配置:

在page组件中找到子组件widget

return [
  'page' => [
    'class' => 'fecshop\services\Page',
    //'terry' => 'xxxx',
    
    # 子服务
    'childService' => [
                'widget' => [
        'class' 		=> 'fecshop\services\page\Widget',
        # 定义默认方法,也就是widgetConfig 里面各个部件里面的method如果没有填写
        # 则使用该配置。
        # 'defaultObMethod' => 'getLastData',
        
        'widgetConfig' => [
          'menu' =>[
            # 必填
            'class' => 'fec\block\TestMenu',
            # view 的绝对路径配置方式
            'view'  => '@fec/views/testmenu/index.php',
            # 下面为选填
            'method'=> 'getLastData',
            'terry1'=> 'My1',
            'terry2'=> 'My2',
          ],
          'love' => [
            'class' => 'fecshop\app\appfront\modules\Cms\block\widget\Test',
            # 根据多模板的优先级,依次去模板找查找该文件,直到找到这个文件。
            'view'  => 'cms/home/test.php',
            'terry' => 'II',
          ]
        ]
        
      ],

上面定义了2个小部件,一个是menu,一个是love,

class是数据提供的类,method是返回数据的方法,view是html部分,其他的参数为class初始化传入类变量,

对于class 是和namesapces一致的

对于view 有2中方法,一种是加入@,譬如@fec,@vendor等,通过autoload查找绝对路径,另外一种就是通过多模板路径,通过多模板的优先级,依次到路径里面查找该view文件,最终返回view文件,因此,优先级低的view文件如果想更改,可以在高优先级的模板中新建这个文件即可(路径要对应好)。

下面以love举例:

新建class文件:

<?php
namespace fecshop\app\appfront\modules\Cms\block\widget;
use Yii;
use fecshop\app\appfront\modules\AppfrontController;
class Test 
{
  public $terry;
  # 网站信息管理
    public function getLastData()
    {
    return [
      'i'   	=> $this->terry,
      'love' 	=> 'loves',
      'you' 	=> 'terry',
    ];
  }
}



view文件内容:appfront/theme/terry/theme01/cms/home/test.php

love test
<?= "$i $love $you"  ?>

通过上面,我们在page-theme组件中加入了配置,新建了小部件的class和对应的方法和变量,view文件,下面我们就可以调用了

在controller中调用:

echo Yii::$app->page->widget->render('love');

可以看到页面输出:

love test II loves terry

我们在controller,view,layout等加入这个小部件,然后对应的html就会显示出来,还是蛮好用的。我们可以配置好各个小部件,有需要就直接添加,甚至给一个小部件做几种样式,在不同的页面调用。

 

 

 

 

《如何使用yii2 fecshop的小部件widget》有1个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注