В первой части мы создадим виджет, который будет «жить» сам по себе, и не зависеть от проекта. Я имею ввиду, что у него будут свои css, js, рисунки и свое представление (вьюха). Для использования виджета необходимо добавить путь, где он будет лежать, в конфиг Yii (main.php) «раздел» import.
Для начала создадим папку Pagination в папке Components.
Также в этой папке мы будем хранить все необходимое для оформления, поэтому создаем там папку assets, там будем хранить необходимые рисунки, css и js. И создадим папку где будет храниться вьюха (шаблон вывода на страницу).
Осталось только создать файл Pagination.php:
Для начала создадим папку Pagination в папке Components.
Также в этой папке мы будем хранить все необходимое для оформления, поэтому создаем там папку assets, там будем хранить необходимые рисунки, css и js. И создадим папку где будет храниться вьюха (шаблон вывода на страницу).
Осталось только создать файл Pagination.php:
Pagination.php
<?php class Pagination extends CWidget { } ?>
Структура папки будет следующей:
Подключаем компонент в config/main.php
'import'=>array( 'application.components.Pagination.*', ),
В Pagination.php создадим метод, который при инициализации виджета будут подключать файлы из assets (css, js).
Так как нам понадобится JQuery, его тоже сразу подключаем.
Файл Pagination.php станет такого вида
class Pagination extends CWidget { private $PatchUrl; private $PatchAssets; private $PatchCss; private $PatchJs; private function RegisterAllFiles(){ $this->PatchUrl = Yii::getPathOfAlias('application.components.Pagination'); //Путь до нашего виджета $this->PatchAssets=$this->PatchUrl.'/assets'; $this->PatchAssets = Yii::app()->assetManager->publish($this->PatchAssets, false, -1, YII_DEBUG); //Подключаем наши assets $this->PatchJs=$this->PatchAssets.'/js'; $this->PatchCss=$this->PatchAssets.'/css'; $cs = Yii::app()->getClientScript(); $cs->registerCoreScript('jquery'); //Подключение JQuery $cs->registerCssFile($this->PatchCss.'/main.css'); //Подключаем css $cs->registerScriptFile($this->PatchJs.'/main.js'); //Подключаем js } public function init(){ $this->RegisterAllFiles(); //Подключение необходимых файлов } }
Теперь при обращении к виджету ( $this->widget(‘Pagination’); ) у нас будут подключаться файлы:
components/Pagination/assets/css/main.css components/Pagination/assets/js/main.js
Думаю, что на этом можно остановиться.
На базе этого примера можно «строить» и другие виджеты, которые будут независимы от проекта, и будут настраиваться от переданных параметров. Как реализовать настройку виджета через параметры я расскажу в следующей части.
ссылка на оригинал статьи http://habrahabr.ru/post/164565/
Добавить комментарий