Пользовательские заголовки фреймворка Yii - PullRequest
1 голос
/ 05 июня 2011

Мне нужны разные заголовки для моей целевой страницы и всех других страниц в моем веб-приложении. Каков наилучший способ сделать это?

Насколько я понимаю, верхний и нижний колонтитулы загружаются из view / layouts / main.php. В моем случае, поскольку я использую тему, она загружается из themes / new / views / layouts / main. PHP

Теперь я хочу, чтобы раздел заголовка для всех моих страниц, кроме целевой страницы, использовал раздел заголовка, как определено в "main.php", однако у целевой страницы должен быть другой заголовок. Как мне это сделать? Должен ли я использовать частичную визуализацию? И поскольку я новичок в Yii, как мне это сделать?

Могу ли я также использовать один из других файлов макетов, column1.php или column2.php? И как?

Я не ищу здесь обширную руку. Мне просто нужно знать, как люди реализовали подобную функциональность.

Ответы [ 2 ]

1 голос
/ 07 июня 2011

Отчасти это зависит от того, насколько разными будут заголовки с точки зрения вашего подхода. Если вы хотите, чтобы они были полностью разделены, вы можете использовать дополнительные файлы макетов в сочетании с main.php или вместо него.

Вы устанавливаете файл макета в начале класса контроллера следующим образом:

public $layout='//layouts/column2';

Это установит макет по умолчанию для контроллера. Вы можете изменить значение в функции действия или оценить условие в функции beforeAction.

Сгенерированные по умолчанию страницы администратора (с «gii» или командной строкой) используют эти макеты column1.php и column2.php с main.php и предоставляют хороший пример того, как они работают. Просто переместите контент из main.php, который вы хотите настроить, и поместите его в отдельные файлы макета. Если вы все еще делитесь контентом, вы можете оставить общий контент в main.php.

Если это просто вопрос изменения нескольких атрибутов, вы можете использовать $this->getAction()->getId(), чтобы получить имя действия, и использовать его для изменения содержимого, загружаемого в макет, например, определенного файла CSS или JS. Любая сложная логика, которую вы хотели бы сделать в контроллере.

Для чего-то вроде навигационной панели или чего-либо подобного, вы также можете использовать include или renderPartial base для переменной среды, которую вы установили в контроллере.

0 голосов
/ 17 июня 2011

Я обычно создаю виджет, такой как HeaderWidget, с несколькими файлами просмотра и включением в основной макет. В контроллере или действии определите необходимый вид файла заголовка и передайте их в виджет.

В базовом контроллере вы можете определить свойство public $ headerName = 'defaultHeaderView' И заданное значение зависит от некоторых условий.

Конечно, вам нужно создать BController, расширяет CController, а все остальные контроллеры - от вашего BController

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...