Как вывести в приложении представление модуля

Есть приложение и модуль в нем, требуется на одной из страниц приложения сделать renderPartial view-шаблона модуля. Как правильно указать путь к представлению модуля?

возможно это стоит сделать через виджет, а потом как-то так в контроле




$content = $this->widget('RatingWidget', array('data' => Video::model()->findByPk($_GET['id']) ) );



мне кажется попытка отрендерить не свой вью не очень кашерна.

хотя если такое возможно, будет интересно знать как это сделать.

Передать в качестве первого аргумента полный путь к view-файлу: application.modules.moduleId.views.viewId

спасибо, будем знать )

Вообще правильнее сделать так “moduleId.views.viewId” т.к. модули могут находиться не обязательно в папке modules, ну и короче так писать:)

Спасибо, работает, но если представление содержит код "$posts = Forum::model()->lastPosts(25);", где Forum - модель модуля, то при вызове представления модуля из приложения получаем include(Forum.php) failed to open stream: No such file or directory. Можно ли что-то сделать, кроме как убрать обращение к БД из представления? Или в данном случае копать в сторону виджетов?

Если у вас есть элемент интерфейса, обращающийся к БД, то нужно оформить его в виде виджета.

В components создайте файл LastPosts.php:




class LastPosts extends CWidget

{

    public function run()

    {

        Yii::import('application.modules.Forum.models.Forum', true);


        $this->render('lastPosts', array(

            'models'=>Forum::model()->lastPosts(25),

        ));

    }

}



Представление lastPosts.php лежит в components/views.

Останется только где угодно в layout или view сделать $this->widget(‘path.to.LastPosts’);

Вообще логика должна содержаться в контроллере, а в представлении чисто отображение уже загруженных в контроллере данных - это основа MVC.

Что бы модель была доступна во всех модулях, ее нужно разместить в application.models

andy_s, огромное спасибо за подробные пояснения, виджет отлично работает.

Верно, но можно и поступить не очень красиво:

в конфиге приложения указать папку моделей модуля, т.е. в "import" добавить "yourModuleId.models.*"