0 follower

Создание архитектуры портлетов

Такие особенности как "новые комментарии", "облако тэгов" лучше реализовывать как портлеты. Портлет - подключаемый компонент пользовательского интерфейса, который рендерит фрагмент HTML-кода. В этом разделе мы описываем, как установить архитектуру портлета для нашего блога.

Основываясь на анализе требований, нам нужно четыре различных портлета: портлет "входа", портлет "пользовательское меню", портлет "облако тэгов" и портлет "недавние комментарии". Эти портлеты будут помещены в сайдбар каждой страницы.

1. Создание класса Portlet

Мы определяем класс Portlet, служащий базовым классом для всех наших портлетов. Базовый класс содержит общие свойства и методы, используемые всеми портлетами. Например, свойство title, которое хранит заголовок портлета; метод, определяющий, как украсить портлет цветным фоном.

Следующий код показывает определение базового класса Portlet. Поскольку портлет часто содержит и логику и представление, мы определяем класс Portlet, расширяя класс CWidget, что означает, что портлет - это виджет и может быть внедрен в представление методом widget().

class Portlet extends CWidget
{
    public $title; // заголовок портлета
    public $visible=true; // виден ли портлет
    // ...другие свойства...
 
    public function init()
    {
        if($this->visible)
        {
            // отрендерить начало блока портлета
            // отрендерить заголовок портлета
        }
    }
 
    public function run()
    {
        if($this->visible)
        {
            $this->renderContent();
            // отрендерить конец блока портлета
        }
    }
 
    protected function renderContent()
    {
        // потомки класса должны переопределять этот метод
        // для рендера необходимого содержимого портлета
    }
}

В коде выше, методы init() и run() требуются классом CWidget и вызываются автоматически, когда виджет рендерится в представлении. Потомки классаPortlet главным образом должны переопределить метод renderContent() для генерации содержимого портлета.

2. Настройка макета страницы

Пришло время скорректировать макет страницы так, чтобы мы могли поместить портлеты в сайдбар. Макет страницы определяется исключительно файлом представления макета /wwwroot/blog/protected/views/layouts/main.php. Он рендерит общие разделы (например, хидер, футер) различных страниц и включает в соответствующем месте динамическое содержимое, сгенерированное отдельными действиями представлений.

Наше приложение блога будет использовать следующий макет:

<html>
<head>
......
<?php echo CHtml::cssFile(Yii::app()->baseUrl.'/css/main.css'); ?>
<title><?php echo $this->pageTitle; ?></title>
</head>
 
<body>
 
...header...
 
<div id="sidebar">
...список портлетов...
</div>
 
<div id="content">
<?php echo $content; ?>
</div>
 
...footer...
 
</body>
</html>

Помимо настройки файла представления макета, мы также должны скорректировать CSS-файл /wwwroot/blog/css/main.css так, чтобы общий вид блога был бы похож на то, что мы видим в демонстрационной версии блога. Мы не будем подробно описывать это здесь.