如何在yii2中在运行时将小部件添加到最终视图?

时间:2015-04-28 10:06:09

标签: yii2

我正在寻找一种方法,可以在不修改视图或布局文件的情况下将小部件添加到最终视图。
想象一下,你正在创建一个包含Bootstrap类(一个实现yii \ base \ BootstrapInterface的类)和一个负责显示一个简单计时器的简单小部件的作曲家包。
您想要将此小部件添加到所有Web响应中的所有视图中。您是否这样做? 我不想触摸我的视图文件或布局文件,我只是尝试创建一个必须单独执行此操作的包。

1 个答案:

答案 0 :(得分:1)

假设您在这里使用yii2,则不得触摸布局和查看文件。

你可以

<强> 1。使用afterRender功能

为此,您需要覆盖View类,添加自己的afterRender函数来处理页面,并根据您自己定义的规则添加窗口小部件。 然后你可以打电话

 $this->view->on('afterRender', ...);

在渲染后做任何你想做的事。

由于控制器调用默认视图类,您还需要覆盖yii \ web \ controller类并更改使用的视图类。

<强> 2。使用Javascript获取小部件并显示给用户

添加一个javascript,它将widget元素附加到正确的位置,使用来自单独的独立(部分)视图文件的ajax获取。

3.如果要开发扩展程序

您可以在视图主体的引导函数中开始或结束触发函数

$app->on(Application::EVENT_BEFORE_REQUEST, function () use ($app) {
        $app->getView()->on(View::EVENT_END_PAGE, [$this, 'renderWidget']);
    });

并添加类似于此的renderWidget函数:

    public function renderWidget($event){
        $view = $event->sender;
        echo "extra html at end of page";
    }