Створення портлетів користувальницького меню
Грунтуючись на аналізі вимог, нам необхідні три портлети: «користувальницьке меню», «хмара тегів» та «останні коментарі». Ми реалізуємо їх, розширивши віджет CPortlet, що входить до складу Yii.
У цьому розділі ми розробимо свій перший портлет — портлет користувальницького меню, який відображає список пунктів меню, доступних тільки аутентифікованим користувачам. Меню містить чотири елементи:
- Ухвалити коментар: гіперпосилання, що веде до списку коментарів, які очікують схвалення;
- Створити новий запис: гіперпосилання, що веде до сторінки створення запису;
- Управління записами: гіперпосилання, що веде до сторінки управління записами;
- Вихід із системи: кнопка, при натисканні на яку поточний користувач виходить із системи.
Створення класа UserMenu
Ми створюємо клас UserMenu для представлення логічної частини портлетів користувальницького меню. Клас зберігається у файлі
/wwwroot/blog/protected/components/UserMenu.php:
Клас UserMenu успадковується від класу CPortlet із бібліотеки zii.
Він перевизначає методи init() та renderContent() класу CPortlet.
Перший встановлює імʼя поточного користувача у якості заголовку портлета,
а другий генерує зміст портлета, рендерингом представлення userMenu.
Підказка: Зауважимо, що ми явним чином підключаємо клас
CPortlet, викликаючиYii::import()до першого звернення до нього.CPortletє частиною офіційної бібліотеки розширеньzii, класи якої не підключаються автоматично з міркувань продуктивності.
Створення представлення userMenu
Потім ми створюємо представлення userMenu, збережене у файлі
/wwwroot/blog/protected/components/views/userMenu.php:
Інформація: За замовчуванням файли представлення віджета повинні поміщатися у піддиректорію
viewsдиректорії, що містить файл класу віджета. Імʼя файлу має бути таким же, як назва представлення.
Використання портлета UserMenu
Прийшов час використовувати наш новий портлет UserMenu. Ми змінюємо файл макету
/wwwroot/blog/protected/views/layouts/column2.php наступним чином:
У коді вище ми викликаємо метод widget() для генерації
і виконання екземпляра класу UserMenu.
Оскільки портлет повинен відображатися тільки аутентифікованим користувачам,
ми викликаємо widget() у разі, якщо властивість isGuest поточного користувача
є false (тобто користувач аутентифікований).
Тестування портлета UserMenu
Давайте протестуємо те, що у нас вийшло.
- Відкриємо вікно браузера і введемо URL
http://www.example.com/blog/index.php. Перевіримо, що нічого не відображається у сайдбарі сторінки. - Натиснемо гіперпосилання
Увійтиі заповнимо реєстраційну форму для входу. У разі успіху, перевіримо, що портлетUserMenuзʼявився у сайдбарі і у нього у заголовку виведено імʼя користувача. - Натиснемо гіперпосилання
Вийтиу портлетіUserMenu. Перевіримо, що дія виходу із системи успішно виконана, і портлетUserMenuзник.
Підсумок
Ми створили портлет, який легко повторно використовувати. Ми можемо легко знову використовувати його у іншому проекті, незначно змінивши або навіть без модифікацій. Крім того, дизайн портлетів слідує філософії про розділення представлення і логіки. Хоча ми і не вказували на це у попередніх розділах, така практика використовується майже всюди у типовому додатку Yii.