PHP і Kohana 3 (MVC) Створюємо віджети (widgets), що додаються через адмінку.
Передмова
Стало цікаво реалізувати таке завдання як віджети, що додаються через адмінку, які будуть у нас відображатися на сторінках сайту. Використовуємо PHP для коду віджетів і CSS для відображення їх, за рахунок чого ми можемо надати можливість відображатися віджетам так як нам потрібно, щоб вони відображалися.
Що таке віджет?
Елемент інтерфейсу - примітив графічного інтерфейсу користувача, що має стандартний зовнішній вигляд і виконує стандартні дії. Інші назви: контроль (control), елемент управління і віджет (англ. widget). (с)Вікіпедія
У нашому розумінні віджет це.
Віджет - це частина коду, що виконує певну функцію і виводить результат у певний блок шаблону.
Все те саме може використовуватися на будь-якій іншій MVC архітектурі, тут тільки для прикладу взята Kohana 3.
1) Ви знаєте PHP і CSS достатньою мірою. 2) Ви знаєте Kohana 3 достатньо. 3) У вас вже встановлено і настроєно фреймворк Kohana 3, зроблено дефолтний шаблон сторінки. 4) У вас готова та підключена база даних до Kohana 3.
Отже, як же це все буде працювати? 1) Додаємо в bootstrap.php код відображення форми додавання віджету:
2) Тепер створюємо сам контролер /classes/controllers/widgets.php:
values(array($_POST['name'],$_POST['i18name']))->execute(); fclose($fp); $fp = fopen($cssfile,'w'); fwrite($fp,$_POST['css']); fclose($fp); > > > $this->template->content = View::factory('widgets/admin/add'); > > ?>
3) Додаємо саму форму додавання віджету /views/widgets/admin/add.php:
4) У базі даних створюємо таблицю widgets:
CREATE TABLE `widgets` ( `wid` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(100) NOT NULL, `i18name` varchar(100) NOT NULL, `showed` int(1) DEFAULT '1', PRIMARY KEY (`wid`,`name`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
5) У контролер шаблону додаємо код який власне читає у нас доступні віджети та відправляє їх та файли стилів у наш основний шаблон:
$widgets = DB::select()->from('widgets')->where('showed','=',1)->cached(20)->execute(); $cntr=-1; foreach ($widgets як $wdgt) $this->template->widgets[$cntr++] = View::factory('widgets/'.$wdgt['name']); $this->template->widgets_styles[$cntr++] = 'assets/widgets/css/'.$wdgt['name'].'.css'; >
6) Виводимо наші віджети в шаблоні, що відображається:
Все, таким чином, через localhost/widgets/add ми зможемо додавати код наших віджетів та стилі, а самі віджети вже відображаються на всіх сторінках, на яких у нас використовується наш основний шаблон.
Це лише базовий приклад як можна створити структуру віджетів на сайті та далеко не повна. Але як основа для досвіду може стати в нагоді. Зараз архітектура віджетів дозволяє лише виводити інформацію. Надалі, якщо буде потреба і бажаючі, ми створимо архітектуру віджетів, які можуть не тільки виводити інформацію, а й виконувати певні дії. Наприклад, віджети типу "Підписка".