Jelly. Реализация собственных типов данных полей |
В своем предыдущем посте я уже начал рассказывать о работе во фреймворке Kohana с такой ORM, как Jelly. Теперь попробую осветить такой момент, как создание собственных типов данных полей на примере обычного DatePicker'а из JQuery UI. Теги: ORM Kohana jqueryui Jelly Рассмотрим все ту же таблицу новостей, о которой я рассказывал ранее. У каждой из новостей есть такое поле, как дата публикации. Допустим по функциональности реализовываемого сайта нам необходимо самостоятельно (вручную) задавать дату публикации новостей. Для такой цели нам и подойдет стандартный DatePicker из библиотеки JQuery UI. Итак, приступим. Для начала определимся от какого из стандартных классов типов полей данных в Jelly мы бы могли унаследоваться для реализации задуманного. Назовем создаваемый нами класс типа данных полей Field_Date, при выводе которого в представлении будет выводится поле с подключенным к нему DatePicker'ом, и унаследуем его от Field_String (в представлении обычный текстовый input, к которому и должен цепляться DatePicker). Для того, чтобы была возможность пользоваться созданным типом данных поля и в других проектах, создадим отдельный модуль для подключения его к проекту. Создадим в папке modules следующую структуру: Мы будем придерживаться такой же структуры, которая реализована в самой Jelly. Нашей задачей по сути является переопределение метода input() у Field_Date, который и занимается выводом отображения поля в представление. Создадим в папке classes/jelly/field файл date.php со следующим содержанием: <?php defined('SYSPATH') or die('No direct script access.'); Данный метод input() отличается от стандартного (определенного у Jelly_Field) тем, что мы создаем внутри метода статическую переменную, которая должна будет помнить добавлено ли уже на страницу поле с типом Field_Date или еще нет. Далее будет понятно, для чего это нам нужно. Теперь согласно структуре модуля Jelly нам нужно создать файл date.php в папке classes/field с содержанием: <?php defined('SYSPATH') or die('No direct script access.'); Теперь нам осталось создать представление для данного типа поля данных. В папке views/jelly/field создадим файл date.php: <? if ( ! $has_added): ?> И видим, что подключение всех необходимых файлов Java Script происходит в зависимости от переменной $has_added. То есть если хотя бы раз на данную страницу было выведено поле с типом данных Field_Date, то больше подключение скриптов происходить не будет. Далее идет привязка DatePicker'а к полю формы input, а затем вывод этого поля. В итоге у нас получается следующая структура: Последним действием перед использованием созданного поля остается прописать подключение данного модуля в bootstrap.php: Kohana::modules(array( Не забудьте, что сам модуль Jelly тоже должен быть подключен. |