Render в виджете

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Moonlight
Сообщения: 22
Зарегистрирован: 2011.12.18, 23:06

Render в виджете

Сообщение Moonlight »

Всем привет!

Я создал виджет "\vendor\yiisoft\yii2\widgets\MYWIDGET.php"

В нём есть метод getLastArticles()

Мне нужно сгенерировать последние статьи во view, на подобии render() в контроллере.

Подскажите как это правильно делается, где располагаются вьюшки для виджетов?

И как их вызывать из виджета?
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: Render в виджете

Сообщение vova07 »

Струткура папки виджета:

Код: Выделить всё

- widgets
-- myWidgets
--- MyWidget.php
--- views
---- index.php
Вывод нужной информации и рендер представления делается в основном файле виджета, в методе "run()":

Код: Выделить всё

public function run()
{
    $models = $this->getLastArticles();
    return $this->render('index', [
        'models' => $models
    ]);
} 
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Render в виджете

Сообщение maleks »

Moonlight писал(а): Я создал виджет "\vendor\yiisoft\yii2\widgets\MYWIDGET.php"
Это папка вендора. Свое туда не пихается. А в app\components например
Yii2 universal module sceleton - for basic and advanced templates
Moonlight
Сообщения: 22
Зарегистрирован: 2011.12.18, 23:06

Re: Render в виджете

Сообщение Moonlight »

При вызове метода render получаю ошибку

Вот код виджета

Код: Выделить всё

<?php

namespace yii\widgets\MyWidget;

use yii\base\Widget;

class MyWidget extends Widget
{
    public function init()
    {

    }

    public function run()
    {
        $models = 'test';
        return $this->render('index', [
            'models' => $models
        ]);
    }
}
Вот снимки структуры папок и ошибки
Вложения
error.PNG
error.PNG (61.48 КБ) 3215 просмотров
structure.PNG
structure.PNG (3.69 КБ) 3215 просмотров
Аватара пользователя
flashimage
Сообщения: 1517
Зарегистрирован: 2011.01.23, 12:43

Re: Render в виджете

Сообщение flashimage »

Я так понимаю во вьюхе у вас используется listView, в котором вы не указали dataprovider?
Бранчи это гомеоморфические эндофункторы, которые мапятся на субманифолды пространства Гилберта.
Moonlight
Сообщения: 22
Зарегистрирован: 2011.12.18, 23:06

Re: Render в виджете

Сообщение Moonlight »

Нет, view пустой.

Просто render почему-то не тот view берёт.

Вот если вызвать этот виджет на главной странице, то он продублирует контент главной страницы (возьмёт её index.php).

Возможно надо где-то переопределить пути.
Moonlight
Сообщения: 22
Зарегистрирован: 2011.12.18, 23:06

Re: Render в виджете

Сообщение Moonlight »

В общем при вызове $this->render('index') в виджете он берет файл из папки "views/site/". Views лежит в корне сайта.

Как переопределить путь для $this->render() так, чтобы вид брался из папки views, которая находится в виджете?
Ответить