MyTetra Share
Делитесь знаниями!
Yii 2: как задать новый шаблон для сайта
Время создания: 18.12.2017 19:01
Текстовые метки: yii 2, шаблон, сайт, layout
Раздел: Компьютер - Программирование - Язык PHP - Yii2
Запись: xintrea/mytetra_syncro/master/base/15136129094e7qv7do3z/text.html на raw.github.com

В коде фреймверка Yii 2 захардкожено название шаблона (layout), который используется по-умолчанию при рендеринге страницы сайта. Шаблон по-умолчанию называется main, и он располагается в файле /views/layouts/main.php.


Чтобы изменить шаблон (имеется в виду чтобы задать другой файл шаблона), в конфигурации предусмотрена настроечная переменная layout. По-умолчанию она в конфигурации не прописана, но ее всегда можно добавить. Для этого нужно в переменную $config файла /config/web.php добавить строку:


$config = [

...

'layout'=>'bestTemplate',

...

];


После чего при рендеринге видов будет использоваться именно этот шаблон.


Вышеописанным способом задается шаблон по-умолчанию для всего сайта. А что делать, если для какого-то контроллера необходим отдельный шаблон? Для этого у класса контроллера есть специальное свойство $layout. Его нужно просто задать в спике инициализации контроллера или в конструкторе.


class PostController extends Controller

{

public $layout = 'post';

// ...

}


А если это необходимо, это свойство можно задать даже перед непосредственным вызовом рендеринга вида.


В общем случае, Yii определяет какой шаблон использовать для контроллера в два этапа.


На первом этапе определяется значение шаблона и контекстный модуль:

  • Если $layout-свойство контроллера отлично от null, используется оно, и модуль контроллера как контекстный модуль.
  • Если $layout не задано (т. е. равно null), происходит поиск среди родительских модулей контроллера, включая само приложение (которое по умолчанию является родительским модулем для контроллеров, не принадлежащих модулям) и находится первый модуль, свойство $layout которого не равно null. Тогда используется найденное значение $layout этого модуля и сам модуль в качестве контекста. Если такой модуль не найден, значит шаблон применен не будет.

На втором этапе определяется сам файл шаблона для рендеринга на основании значения $layout и контекстного модуля. Значением $layout может быть:

  • Алиас пути (например, @app/views/layouts/main).
  • Абсолютный путь (например /main): значение $layout начинается со слеша. Будет искаться шаблон из yii\base\Application::layoutPath приложения, по умолчанию это @app/views/layouts.
  • Относительный путь (например, main): Будет искаться шаблон из yii\base\Module::layoutPath, по умолчанию это views/layouts в yii\base\Module::basePath.
  • Булево значение false: шаблон не будет применен.

Если у значения $layout (а это, как уже понятно, просто строка с названием нужного шаблона) нет расширения, будет использовано расширение по умолчанию - .php.



Знаете ли вы, что:

Опытные администраторы всегда размещают мощности сайта в хорошем и проверенном дата-центре. Услуги по размещению серверов и хостингу оборудования связи в надежном дата-центре уровня Tier3 можно найти здесь.


Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования