Друзья
Как отображать статичные страницы в Yii?
15 августа 2011
Данная заметка является вольным переводом вики-статьи How to display static pages in Yii.
В веб приложениях нам часто нужно создавать такие страницы, как «Об этом сайте» или «Правовая информация», содержимое которых по большей части статичное. Существует несколько подходов.
Можно хранить такие страницы в виде простых отдельных HTML файлов. Веб сервер будет отправлять такие страницы напрямую конечным пользователям минуя PHP. Недостаток данного подхода заключается в том, что в этом случае поддержка общего шаблона и кода между такими статичными и другими динамическими страницами сайта очень сильно усложняется.
Другим способом решения проблемы является написание новых экшнов контроллера, соответствующих каждой новой странице. Это решает проблему с общим шаблоном, однако процесс сводится к рутине: каждый раз мы должны писать новый экшн для каждой страницы, который ничего, кроме вывода шаблона и не делает (противоречие принципу DRY).
Мы можем воспользоваться стандартным классом фреймворка CViewAction для создания таких страниц. Данная заметка описывает именно этот подход.
Для начала в контроллере по умолчанию SiteController (или в любом другом контроллере, который вам нужен) переопределите метод actions():
public function actions() { return array( 'page'=>array( 'class'=>'CViewAction', ), ); }
Код выше определяет внешний экшн page у текущего контроллера, классом которого является CViewAction. Добавление внешних экшнов контроллеров описано в руководстве.
Затем создайте директорию protected/views/site/pages.
Ну и наконец создайте для каждой статической страницы PHP файл в этой директории. Например, страницу «Об этом сайте» мы можем сохранить как about.php. Имейте ввиду, что такие страницы будут использовать шаблон по умолчанию самого приложения. Поэтому в каждом файле нужно сохранять только основное содержимое страницы.
Мы закончили! Наша страница about должна быть доступна данной ссылке:
http://www.example.com/index.php?r=site/page&view=about
Для того, чтобы украсить ссылку можно воспользоваться подходом, описанным в руководстве.
Если у нас имеется множество страниц, то мы можем разместить их в под-директориях в protected/views/site/pages. Страница, которая расположена на диске в директории protected/views/site/pages/help/contact.php будет доступна по ссылке:
http://www.example.com/index.php?r=site/page&view=help.contact
Если CViewAction работает не так, как вам нужно, то его поведение можно изменить. Более подробно класс CViewAction описан в документации по API фреймворка.
№ 3
John Sergeyev
1 сентября 2011, 20:48
№ 4
resurtm
1 сентября 2011, 21:44
№ 5
SpiLLeR
6 сентября 2011, 15:56
№ 6
resurtm
6 сентября 2011, 19:54
№ 1860
webadver
7 февраля 2012, 23:19
Заранее спасибо
№ 1861
resurtm
8 февраля 2012, 12:36
Тут лучше подойдет хранение в базе и работа с данными через AR-модель.