Весь набор лежит в Git-репозитарии
Это не полный набор приложения, набор состоит только из измененных и новых файлов.
В наборе есть код не моего авторства, при этом сохранена информация об авторе и указаны изменения (если есть) которые произведенены в файле мной.
Весь пакет распространяется «как есть», без каких либо гарантий и обязательств и совершенно бесплатно.
Главное условие — при использовании Вы должны оставить в исходном коде информацию об авторстве этого кода, лишь расширив упоминанием себя в случае каких-то изменений внесенных вами.
Весь пакет распространяется «как есть», без каких либо гарантий и обязательств и совершенно бесплатно.
Главное условие — при использовании Вы должны оставить в исходном коде информацию об авторстве этого кода, лишь расширив упоминанием себя в случае каких-то изменений внесенных вами.
К сожалению, документация есть только на библиотеку роутинга — она уже давно описана в местной вики, но претерпела незначительных изменений в сторону расширения функциональности.
Общее описание расширений
Классы
Роутинг — возможность описывать правила формирования ссылки. Детально описана здесь. Новшества —
- возможность описать в ройтинге быструю модификацию результата ройтинга путем замены символов или целых слов.
- возможность произвести редирект на другой урл в случае совпадения патерна.
Пример: Необходимо обработать массу старых урлов вида domain/name_name2, переопределив клиента на новый domain/ru/name-name2
$route[] = array(
'main' => '([^ru][^ua]){2}/*(.+)',
'name' => 'old_route',
'url' => '',
'route' => '/ru/$0',
'replace' => array(
array(
'key' => '_',
'value' => '-'
)
),
'redirect' => 301
);
произведет редирект любых урлов без описанных языковых алиасов на адрес с русским алиасом заменив все символы подчеркивания на тире. Групп замены может быть сколь угодно много.Данное расширение функционала сомнительно, т.к. это можно сделать еще на стадии обработки запроса mod_rewrite’ом, потому я не выкладываю это обновление в Вики.
Autoloader — очень простой класс автозагрузки, просматривающий папку библиотек и обрабатывающий пиаровскую конвенцию именования классов (AClass_BClass_Cclass == AClass/BClass/Cclass.php)
Кеширование Предлагается на выбор Zend_Cache (link) и Memcache моя реализация повторяющая интерфейс Zend_Cache. Т.е. если грузить библиотеку кеша с установкой имени, то можно везде использовать $this->cache и в продакшене переключать типы кеша.
Registry — простой класс накопления и возврата объектов/переменных. Метод возвращающий значение ключа принимает так же третий параметр — значение по умолчанию, которое будет возвращено, если ключ не будет найден.
Pagination — класс пагинации заменяющий полностью базовую библиотеку. Изменения коснулись механизма генерирования ссылок — возможно использовать правила роутинга для формирования урла (описано выше) или другой режим — формирование ссылки как ассоциативных пар (т.е. нет фиксированного номера сегмента номера страницы). Более подробно я опишу этот класс чуть позже или здесь или в Вики в русском сообществе), если он заинтересует Сообщество.
MY_URI — Изминения коснулись
- парсинг запросов. Случай, когда на сервере работает nginx и php работает в режиме FastCGI стандартной библиотекой обрабатывается не корректно, если приложение работает и с сегментной адресацией и GET-запросами. В конфиге uri_protocol нужно определить тогда как REQUEST_URI.
- изменено поведение функции uri_to_assoc/ruri_to_assoc — второй параметр $default теперь может принимать не просто набор названий параметров, но и ассоциативный массив — имя параметра=>значение по умолчанию (если нет в урле).
MY_Log — добавляет новый тип логированных сообщений — LOG, встраиваясь в ряд под номером 2. Таким образом позволяет в продакшене логировать события встроенными средствами — например размер загруженного обновления данных запускаемого по крону.
MY_Image_lib — поддержка ресайза только по изветсной одной величине (расчет второй величины с соблюдением соотношения сторон).
View — самая большая библиотека из набора. Разрабатывается для моего велосипеда, о котором я пытаюсь писать в своем блоге (линк в подвале) — CMS, но легко портировалась на простые приложения.
Основные моменты:
- layout или темы оформления без заботы о их выборе в конкретных вызовах
- за счет расширения Loader’а подменен вызов $this->load->view , что дает возможность быстро подключить к готовому приложению.
- Полностью автоматическое формирование заголовочной части html-документа.
- возможность подключить файлы стилей, JavaScript из любого места приложения при помощи набора простых вызовов (есть одноименный хелпер).
- Библиотека ориентирована на использование jQuery, но легко переделывается на любой другой JavaScript-framework. Поддерживается добавление в 2 события — html-структура загружена и весь документ загружен.
- Умеет сливать css-файлы в один, производя таким образом кеширование и позволяя ускорить загрузку страницы. При этом есть возможность по маске регулярного вырожения запретить прикреплять отдельные файлы, например, файлы стилей jQueryUI.
- Файл настроект темы позволяет задать любые параметры, определить всегда подключаемый файлы. Напрмиер: — главную таблицу стилей (есть параметр определяющий где размещать этот файл, в конце или в начале списка стилей), — задать адрес использованного по умолчанию JS-скрипта, — часть title документа и указать где он будет расположен, — определить favicon сайта...
Об этой библиотеке я напишу более развернутую статью.
MY_Controller — по сути, просто делает финальным _remap, запускает базовые классы, указывает layout и ищет _reremap или сам вызываемый метод. Если вызываемый метод возвращает массив — отдает ответ клиенту ввиде JSON-объекта с соответствующими заголовками. Наверно, самый слабый и безполезный класс из всего набора, но мне с ним проще жить :) .
Так же, в набор включена библитека SAX для парсинга XML. В ней никаких изминений не производилось.
В набор включен так же плагин для использования флеша на сайте на основе JS-библиотеки Swfobject. Плагин работает с использованием библиотеки View т.к. пришел все из тойже CMS.
Есть и хелпер с сервисными функциями, своеобразный швейцарский нож.
Если данный пакет окажется кому-то полезным — буду несказанно рад. Значит не зря...
Приветствуются слова благодарности, вопросы, тухлые помидоры и исправления.
3 комментария:
Хотя бы чуток было задокументировано. А так возникают сложности, что и как правильно использовать. Скопировал вашу заготовку на чистый дистриб ci. Он выдал ошибку (про хелпер ) и нет коннекта к базе. Хотя базовый контроллер welcome_message не требует подключения к бд. Спасибо за наработки. Буду копать все равно
1) база грузится в автозагрузке.
2) http://code-igniter.ru/forum/viewtopic.php?f=4&t=1714 -- здесь чуть больше описания и можно более удобно задавать вопросы.
Это писалось для себя... и как мне кажется, мой код вполне прозрачен для понимания.
Да. Спасибо разобрался.
Отправить комментарий