Доброй ночи, хабралюди.
Хотел бы поделиться с вами самодельной библиотекой для codeigniter под названием Notify.
Она создана для вывода сообщений пользователю.
Библиотеке немного больше полугода. В своем первом представлении она была еще хелпером и для самописной crm которую я тогда писал.
Позже перешел на codeigniter и перетащил ее за собой.
С тех пор тяну из проекта в проект. Меня устраивает, может быть кому-то тоже будет полезна.
Повторюсь, что библиотека создана для вывода сообщений пользователю.
Базовые стили и необходимые js-скрипты включены прямо в текст php файла. Сделано это для собственного удобства.
В зависимости от того, асинхронно ли запрошена страница или нет, ответ будет записан в сессию, или возвращен в формате json.
Можно вернуть одно сообщение или очередь. Сообщения могут быть разнотипными.
Можно вставить сообщения в очередь и сделать редирект, а можно вставить их в очередь перед загрузкой view, и они будут показаны тут же. Идентично выглядят сообщения, добавленные javascript'ом, как разобранные из ответа сервера, так и добавленные напрямую из js-кода.
Можно передать с ответом данные или адрес перенаправления.
Я знал, что это не воспримется на ура) Поверьте это не от безграмотности (ну мне хочется на это надеяться :) ). Постараюсь объяснить, почему так было сделано.
В начале работы над библиотекой правок было много мелких правок. А использовалась она одновременно тогда на нескольких проектах, двух или трех, я точно не вспомню. Синхронизация в изменениях кода вызывала, прошу прощения, сильнейший butthurt. Я уже писал выше, что слито было все в один файл для собственного удобства.
На данном этапе большого количества правок нет, и я думаю, что смогу наконец отделить мухи от котлет)
Комментарии, плюсы, минусы, форки — буду рад любой реакции.
Спасибо.
Для тех кто ищет ссылки на скачивание внизу поста:
ссылка на репозиторий была изменена с
github.com/antongorodezkiy/codeigniter-notify-library
на
github.com/antongorodezkiy/notify-library
Скачать с github
Библиотека обновлена. Убран один критичный баг, делавший работу библиотеки невозможной.
Также добавлен метод mustDie, разрешающий/запрещающий библиотеке прерывать выполнение скрипта после return* методов. Сделано это для использования в модулях (например HMVC), в моем случае например:
Библиотека обновлена.
Хотел бы поделиться с вами самодельной библиотекой для codeigniter под названием Notify.
Она создана для вывода сообщений пользователю.
Совсем чуть-чуть истории
Библиотеке немного больше полугода. В своем первом представлении она была еще хелпером и для самописной crm которую я тогда писал.
Позже перешел на codeigniter и перетащил ее за собой.
С тех пор тяну из проекта в проект. Меня устраивает, может быть кому-то тоже будет полезна.
Совсем чуть-чуть описания
Повторюсь, что библиотека создана для вывода сообщений пользователю.
Базовые стили и необходимые js-скрипты включены прямо в текст php файла. Сделано это для собственного удобства.
В зависимости от того, асинхронно ли запрошена страница или нет, ответ будет записан в сессию, или возвращен в формате json.
Можно вернуть одно сообщение или очередь. Сообщения могут быть разнотипными.
Можно вставить сообщения в очередь и сделать редирект, а можно вставить их в очередь перед загрузкой view, и они будут показаны тут же. Идентично выглядят сообщения, добавленные javascript'ом, как разобранные из ответа сервера, так и добавленные напрямую из js-кода.
Можно передать с ответом данные или адрес перенаправления.
Установка
Скачайте codeigniter-notify-library с github
Скачать с github
- В составе библиотеки два файла, один пойдет в папку /application/config, второй в /application/libraries/
- Подключите библиотеку через autoload.php или напрямую в контроллере через load->library
- После этого и змените основной/основные views
<html> <head> ... <?=$this->notify->initJsCss()?> <!--Эта инициализация - не единственный методподключения, но самый быстрый--> </head> <body> <?=$this->notify->getMessages()?><!--Здесь вывод всех сообщений--> ... </body> </html>
Пример использования в php:
function some_action() { if ($result) { $this->notify->error('Часть данных не с��хранена'); $this->notify->setData( json_encode(array('sum_count' => 4)) ); $this->notify->returnSuccess('Функция отработала'); } else $this->notify->returnError('Случилась какая-то ошибка'); }
Пример использования в js:
$.post(url,form_data,function(data) { var json = $.parseJSON(data); if (notifyIsSuccess(json)) { $(".sum").text(json.data.sum_count); notifySuccess('Запись суммы прошла успешно'); } notify(json); // выведет очередь сообщений, если таковые есть });
Основные методы
// добавление ошибки в очередь $this->notify->error('Случилась какая-то ошибка'); // php notifyError('Случилась еще одна ошибка'); // js // добавление успешного сообщения в очередь $this->notify->success('Но основную часть мы выполнили'); // php notifySuccess('И это действие тоже успешно'); // js // присоединим данные к ответу // из javascript он будет доступен через объект data в ответе $this->notify->setData( json_encode(array('item' => 'value')) ); // в случае синхронного запроса, на этот адрес произойдет редирект из php, // в случае асинхронного будет сменен window.location $this->notify->setComeback( site_url() ); // этот метод завершит дальнейшее выполнение скрипта $this->notify->returnNotify();
Зависимости:
- jQuery, актуальная версия, но думаю что с начиная с 1.3.2 должно работать (не проверял)
- стандартная библиотека сессий
UPD, по поводу хардкода css и js
Я знал, что это не воспримется на ура) Поверьте это не от безграмотности (ну мне хочется на это надеяться :) ). Постараюсь объяснить, почему так было сделано.
В начале работы над библиотекой правок было много мелких правок. А использовалась она одновременно тогда на нескольких проектах, двух или трех, я точно не вспомню. Синхронизация в изменениях кода вызывала, прошу прощения, сильнейший butthurt. Я уже писал выше, что слито было все в один файл для собственного удобства.
На данном этапе большого количества правок нет, и я думаю, что смогу наконец отделить мухи от котлет)
Комментарии, плюсы, минусы, форки — буду рад любой реакции.
Спасибо.
Для тех кто ищет ссылки на скачивание внизу поста:
ссылка на репозиторий была изменена с
на
github.com/antongorodezkiy/notify-library
Скачать с github
UPD от 26.03.12
Библиотека обновлена. Убран один критичный баг, делавший работу библиотеки невозможной.
Также добавлен метод mustDie, разрешающий/запрещающий библиотеке прерывать выполнение скрипта после return* методов. Сделано это для использования в модулях (например HMVC), в моем случае например:
... $this->notify->mustDie(false); $result = Modules::run('admin/programs_offers/attach'); // внутри есть один из методов $this->notify->returnError(); $this->notify->mustDie(true); if ($result) $this->notify->returnSuccess('Модуль выполнен успешно');
UPD от 16.06.12
Библиотека обновлена.
// можно задать время жизни сообщения (ttl), 0 - значит что сообщение будет постоянным, пока пользователь сам его не закроет $this->notify->returnError('Случилась какая-то ошибка',0); // время жизни сообщений может быть задано глобально методом setTtl(), в секундах $this->notify->setTtl(4); // если какое сообщение не должно быть выведено, можно использовать метод setSilence() $this->notify->setSilence(true); $this->notify->returnError('Случилась какая-то ошибка'); // это сообщение не будет выведено $this->notify->setSilence(false); $this->notify->returnError('Случилась еще одна какая-то ошибка'); // это сообщение будет выведено // дальнейшее выполнение скрипта не пойдет, ошибка будет передана в ответе или сохранена в сессии // сообщения выводятся в месте вызова метода $this->notify->getMessages(); // если требуется разделить вывод сообщений, допустим некоторые из них выводить прямо в форме // можно вызвать метод getMessages() с именем региона, а сам регион указывать глобально или при сохранении сообщения в очередь // controller: $this->notify->error('Сообщение 1'); ... $this->notify->error('Сообщение 2','','форма логина'); // view: $this->notify->getMessages(); // будет выведено Сообщение 1, Сообщение 2 остается в очереди ... $this->notify->getMessages('форма логина'); // будет выведено Сообщение 2
