Yii - Использование файла альтернативного представления в пользовательском модуле Yii
Можно ли использовать файл пользовательского представления в модуле (например, пользователь), чтобы сохранить модуль (сторонний) нетронутым? Как-то расширить модуль с папкой представлений, которая содержит мои пользовательские представления.
4 ответа
Скопируйте файлы представления пользовательского модуля в <app>/themes/<current_theme>/views/user/
, В более общем плане, настройте виды модулей, используя следующую "формулу": <app>/themes/<current_tehem>/views/<modules_name>/<controller_name>/<view_file_to_customize>.php
Путь к просмотру темы модуля должен быть
/ {{Your_app_name}} / темы / {{THEME_NAME}} / просмотров / пользователь /
Скопируйте все виды модулей из папки
/ {{your_app_name}} / защищенные / модули / пользователь / просмотров
в вышеупомянутую папку, и это сделает работу. После этого вы можете настроить вид, как вам нравится.
Используйте тему. Для модуля с именем "user" и пути просмотра "profile / edit" создайте "/themes/flashy/user/views/profile/edit.php". Вы также можете определить новый макет в "/themes/flashy/layouts/column2.php". Затем добавьте в ваш файл конфигурации в "protected / config":
return array(
// many settings...
'theme' => 'flashy',
Для модуля "пользователь", который вы указали, к сожалению, его контроллеры используют абсолютные пути для своих макетов (например, "//layouts/columns2"), поэтому, AFAIK, вы не можете определить различные макеты для приложения и этого модуля.
Смотрите также главу официального руководства по тематике с Yii.
Я не согласен с тем, что на многих справочных форумах в Интернете, когда кто-то спрашивает о теме модуля, каждый предлагает псевдоним пути к папке тем. Я думаю, что это неправильно, потому что это подразумевает разделение модулей, а модули должны быть черным ящиком, который можно использовать в разных проектах. Рекомендации, данные на таких форумах, будут действительны только в том случае, если тема разделена между несколькими модулями. Если кто-то хочет "упаковать" тему внутри модуля, он может: -добавить функцию init к контроллеру модуля -внутри init, использовать макет атрибута класса и псевдоним пути, например, добавить модуль с идентификатором это "Образец": затем вы добавляете в SampleCOntroller.php:
public function init() {
//BELOW: it will use the layouts/main.php inside the module.
$this->layouts = "sample.views.layouts.main";
}