@Anchor00

YII2: Как сделать Layout уровня-Модуля?

Есть приложение backend.
1. Layout, основной, уровня-Приложения. В backend есть свой, главный layout (с доктайп, боди ...). Он лежит в backend\views\layouts\main.php . Внутри него есть область, скажем так "контента модулей" (подобно Joomla, в ней есть шаблон, а внутри него область для Joomla-компонентов). Т.е. есть часть шаблона которая НЕ меняется от модуля к модулю (меню админки, футер админки, вспопогательные интрументы вверху).
2. Layout уровня-Модуля. Далее идет Модуль у которого тоже должен быть layout, "уровня модуля". Т.е. та часть модуля которая НЕ меняется от Контроллера к Контроллеру (внутри модуля) Напр. меню админки модуля.
3. Далее идет непосредственно view Модуля.

(на примере Joomla c2n.me/3sdYF2U Красным выделено - Layout, основной, уровня-Приложения. Синим - Layout уровня-Модуля. Зеленым - непосредственно Тело Модуля. (Черным - сам Модуль))

Если я в бутстрап-классе Модуля задаю свойство layout='ModuleLayout' то он устанавливает его для ВСЕГО приложения, как ОСНОВНОЙ.

Собственно вопрос. Как в YII2 сделать этот самый Layout уровня-Модуля?
  • Вопрос задан
  • 5272 просмотра
Решения вопроса 1
Для модуля аналогичное переопределение как и для контроллеров. Таким вот образом. Если layout не переопределен для модуля, он будет использовать его в уровне приложения.
для пути @backend/views/layouts/post.php
namespace app\controllers;

use yii\web\Controller;

class PostController extends Controller
{
  //
    public $layout = 'post';
}


Пруф

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

Либо используйте вложенность для шаблонов. Описывается ниже в статье, на окторую дал ссылку.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
...
class Module extends \yii\base\Module
{
    ...
    public function init()
    {
        parent::init();
        $this->layout = 'admin';
    }
...
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы