В этой статье я хотел бы познакомить читателей с архитектурой весьма интересного open-source (GPL3) проекта EspoCRM на примере создания нового модуля для этой системы.
Что такое CRM-система (Customer relationship management), думаю, многие уже давно знают. Особенность данной CRM-системы в том, что она написана как Single Page Application и поэтому довольно «шустрая».
Простой дизайн и современные технологии программирования многим придутся по вкусу, а быстродействие данной CRM-системы приятно удивит. На сайте доступна демо-версия.
Добиться высокой скорости работы помогло кэширование скриптов и шаблонов в Local Storage. Все view вместе с дочерними собираются в один большой HTML, который отображается на экране у пользователя.
Система имеет мощный API, использующий JSON, а веб-интерфейс по сути является API-клиентом.
Система не перегружена функционалом, но имеет все необходимое, а также неплохо настраивается.
Читать полностью »
Рубрика «php» - 160
Создание нового модуля для open-source CRM EspoCRM
2014-07-17 в 10:32, admin, рубрики: CRM, CRM-системы, open source, phpZExt Framework :: Cache
2014-07-16 в 16:31, admin, рубрики: cache, framework, memcache, phalcon, php, zext, Веб-разработка 
Эта статья описывает использование модуля «Cache» PHP-фреймворка «ZExt».
Модуль отвечает за кеширование данных, получение которых требует существенных затрат времени и ресурсов.
Возможности
- Поддержка тегов для любых хранилищ
- Профилирование запросов
- Гибкая архитектура компонентов позволяющая легко расширять возможности сервиса
- Фабрика для удобного создания сервиса кеширования из имеющихся компонентов
- Агрегация с отладочной панелью фреймворка
- Действия с множествами данных использующие нативные методы систем кеширования
Facebook XHP. Объектный шаблонизатор
2014-07-15 в 13:21, admin, рубрики: Facebook, hacklang, HHVM, php, Веб-разработка, шаблонизаторНесмотря на то, что Facebook анонсировал XHP еще в феврале 2010 года, до сих пор об этом шаблонизаторе очень мало информации, хотя даже как идея XHP весьма и весьма интересен.
В этой статье я попытаюсь дать краткий обзор XHP, основные плюсы и минусы, а также затрону вопросы производительности.
Читать полностью »
Делаем простейший фильтр по свойствам товаров с помощью ElasticSearch на Symfony2
2014-07-15 в 9:13, admin, рубрики: elasticsearch, filtering, online-store, php, symfony, symfony 2, Веб-разработкаНаписать эту статью меня сподвигло отсутствие в интернете готового пошагового руководства «как реализовать фильтр товаров на ElasticSearch», а задача сделать это у меня стояла чётко и непоколебимо. Удавалось находить отрывочную справочную информацию, но никак не cookbook по решению самых тривиальных задач.
Акцентирую ваше внимание именно на symfony2, поскольку буду использовать FOSElasticaBundle, который позволяет описывать mapping индексов elasticsearch в удобных yaml конфигах и привязывать к ним сущности Doctrine ORM или документы Doctrine ODM. Промаппленные индексы заполняются из связанных доктриновских сущностей с помощью одной единственной консольной команды. Кроме того, он включает в себя вендорную библиотеку для конструирования поисковых и фильтрационных запросов. Результаты поиска возвращаются в виде массива объектов сущности или документа Doctrine ORM/ODM, привязанной к поисковому индексу. Подробнее о FOSElasticaBundle, традиционно, на гитхабе: github.com/FriendsOfSymfony/FOSElasticaBundle
Использование бандла позволяет полностью абстрагироваться от манипуляций с чистым JSON, что-то кодировать и декодировать функциями json_encode и json_decode, лезть куда-то с помощью сurl. Здесь только ООП подход!
Немного о схеме данных в SQL
Поскольку мои товары хранятся в реляционной СУБД, мне понадобилось реализовать EAV модель для их свойств и значений (подробнее: en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model )
В результате, у меня вышла вот такая схема данных:

Читать полностью »
Инверсия управления (Inversion of Control) — важный принцип объектно-ориентированного программирования, используемый для уменьшения связанности в компьютерных программах (“Википедия”).
Простой как Pimple, мощный как Symfony DI
Syringe — простой IoC Container написанный на PHP с большим количеством возможностей и декларативной конфигурацией.
В нем реализованы: внедрение параметров, фабричные методы, основные виды инъекций, в том числе и через интерфейс, области видимости, внедрение тега и триггеры.
Далее возможности расписаны более подробно.
Читать полностью »
YaLinqo (LINQ to Objects для PHP) — версия 2.0
2014-07-14 в 8:01, admin, рубрики: functional programming, linq, linq to objects, php, php5, php5.5, похапэ, Программирование, функциональное программирование
Что-что?
LINQ — это штука, которая позволяет писать запросы, чем-то похожие на SQL, прямо в коде. LINQ to Objects, собственно, позволяет писать запросы к объектам, массивам и всему тому, чем вы оперируете в коде.
Это ещё зачем?
Если у вас есть база, то у вас есть любимый ORM (или любимый голый SQL — кому как по вкусу). Но иногда объекты приходят из веб-сервисов, из файлов, да и вообще тьма тьмущая объектов может требовать нетривиальной обработки: преобразование, фильтрация, сортировка, группировка, агрегация… Применить бы привычный ORM или SQL — но базы-то нет. Тут на помощь приходит LINQ to Objects, в данном случае YaLinqo.
Что умеет?
- Самый полный порт .NET LINQ на PHP, со многими дополнительными методами. Всего реализовано более 70 методов.
- Ленивые вычисления, текст исключений и многое другое, как в оригинальном LINQ.
- Детальная документация PHPDoc к каждому методу. Текст статей адаптирован из MSDN.
- 100% покрытие юнит-тестами.
- Коллбэки можно задавать замыканиями, «указателями на функцию» в виде строк и массивов, строковыми «лямбдами» с поддержкой нескольких синтаксисов.
- Ключам уделяется столько же внимания, сколько значениям: преобразования можно применять и к тем, и к другим; большинство коллбэков принимает на вход и то, и другое; ключи по возможности не теряются при преобразованиях.
- Минимальное изобретение велосипедов: для итерации используются Iterator, IteratorAggregate и др. (и их можно использовать наравне с Enumerable); исключения по возможности используются родные похапэшные и т.п.
- Поддерживается Composer, есть пакет на Packagist.
- Никаких внешних зависимостей.
Что случилось?
Прошёл год, как вышел PHP 5.5 со всякими вкусностями типа генераторов и исправленных итераторов. Так как на моей совести самый полноценный порт LINQ на PHP, то я решил, что настало время его обновить и воспользоваться новыми фичами языка.
Данным постом хочу представить IT-сообществу свой давний проект: PHP фреймворк «ZExt».
В результате многолетней работы в различных проектах у меня накопилась библиотека, так сказать, всяческих полезностей, облегчающих повседневный труд программиста. Некоторые компоненты данного фреймворка являються частями корпоративного фреймворка компании viboom.ru в которой я проработал продолжительное время создавая эти компоненты. От руководства компании было полученно согласие на публикацию части исходного кода фреймворка. В последнее время я провёл определённую работу по «причёсыванию» фреймворка и теперь готов его представить сообществу в надежде, что вы найдёте чего либо полезное для себя в компонентах фреймворка.
Читать полностью »
YII 2, старт для новичка
2014-07-10 в 19:59, admin, рубрики: codeigniter, crud, framework, mvc, php, yii, yii 2, ооп
Чтобы начать делать сайты на YII2, нам понадобится Веб-сервер, PHP 5.4, Git, Composer, знание «ООП в PHP» и АйКью > 103. Надо сказать, это будет не так уж и сложно, но и не просто. Эта статья поможет стартануть проект на YII2 самому дну веб-разработки: «школьникам» и старперам — адептам CodeIgniter. Другие статьи в Интернете либо еще не созданы (стабильной версии YII2 еще нет), либо написаны для тех, кто уже создал тысячу YII1 и сотню YII2 сайтов. Я не такой и статью я буду писать не такую, а простую и понятную, ведь эта статья — мой конспект, который я вел во время изучения YII2. Читать полностью »
Отображение погоды на Вашем сайте
2014-07-10 в 17:10, admin, рубрики: php, Веб-разработка, погода, яндекс Думаю очень многие знают о информерах для сайта от Яндекс.Погоды. Но не всегда нам нужно такое отображение данных, которое даёт нам сам Яндекс. В этом посте я расскажу, как сделать отображение погоды без официальных информеров. Кроме этого, погода будет показываться посетителю Вашего сайта в зависимости от его региона.
Читать полностью »
Вход в web-приложение с использованием распознавания лица
2014-07-09 в 12:53, admin, рубрики: openbr, opencv, php, security, two-step verification, Блог компании Token2.com, интерфейсы, информационная безопасность 
В первый раз я столкнулся с системой входа в систему, основанной на распознавании лица на ноутбуке от Lenovo. Было забавно, но как ни странно, работало. Проверял при разном уровне освещения, со слегка модифицированной мимикой, с приближением и удалением от камеры. Качество распознавания удивляло, ложных срабатываний не было. Большой ложкой дегтя, конечно, была возможность аутентификации с помощью распечатанной фотографии.
Наша компания предлагает решения для двухфакторной аутентификации, которые уже можно назвать классическими: одноразовые пароли по SMS, аппаратные ключи и мобильные приложения, генерирующие одноразовые пароли на смартфонах пользователей. Параллельно, мы рассматриваем дополнительные методы «второго фактора», в данном конкретном случае в исключительно научных целях — по вполне понятным причинам.
Итак, представленный ниже метод биометрической аутентификации не рекомендуется для промышленной эксплуатации в качестве замены первого фактора (пароля). Риск при использовании метода в качестве второго фактора существенно меньше, но все еще существует — решайте сами. Я просто расскажу, как и с помощью каких инструментов можно организовать аутентификацию для веб приложения с использованием распознавания и валидации изображения человеческого лица. Аппаратная реализация — обычная web-камера.
Читать полностью »
