Pattern Registry – «Реестр»

15 апреля 2012

Данный паттерн, как и Singleton, редко вызывает положительную реакцию со стороны разработчиков, так как порождает те же самые проблемы при тестировании приложений. Тем не менее, ругают, но активно используют. Как и Singleton, шаблон Реестр встречается во многих приложениях и, так или иначе, значительно упрощает решение некоторых задач.

Подобно Одиночке, паттерн Registry вводит объект в глобальную область видимости, позволяя использовать его на любом уровне приложения. О глобальной области видимости в PHP я уже писал в заметке о паттерне Singleton, ввиду чего предлагаю ознакомиться с ней, прежде чем продолжить читать дальше. Там вы найдете ответы на большую часть возможных вопросов.
Паттерн Registry получил распространение в двух вариантах реализации. Одну из них нередко называют «чистым реестром», вторую – «реестр одиночка» (Singleton Registry).

Рассмотрим оба варианта по порядку.

Читать далее »

Поиск по произвольным полям с помощью класса WP_Query

12 апреля 2012

Некоторое время назад опубликовал две заметки на тему использования плагина Magic Fields. На вторую была возложена обязанность ответить на вопрос организации поиска по дополнительным полям, созданным с помощью данного плагина. Но, судя по количеству вопросов, появляющихся в комментариях, стоит внести дополнительную ясность.

Прежде всего, необходимо понимать, что плагин Magic Fields представляет собой обертку для нативного механизма произвольных полей WordPress. Иными словами, это не более чем удобный интерфейс, за которым кроются привычные произвольные поля, замечательно описанные в официальной документации. В той же документации подробно освещается поиск по ним и все прочее, что может быть востребовано.

Читать далее »

JavaScript и IE: Expected identifier, string or number

8 апреля 2012

В старом блоге была заметка с точно таким же заголовком и аналогичной смысловой нагрузкой. Я подумал, что нет никакого резона переносить ее в новый блог, слишком уж сомнительной, как мне казалось, была ее ценность.

Тем не менее, время от времени натыкаюсь на скрипты, где расставлены все те же грабли. Ситуация приобретает особый шарм, если содержащее ошибку приложение пропущено через компрессор и несжатые исходники отсутствуют.

Ошибка: Error: Expected identifier, string or number

Данная ошибка возникает в том случае, если в перечислении свойств объекта присутствует лишняя запятая — после последнего свойства. JavaScript движок в IE 7 (и ниже) считает, что не задано наименование следующего свойства объекта. Ситуация усугубляется тем, что при возникновении такой ошибки прекращается обработка всех JS скриптов на странице.

Читать далее »

Kickstrap — форк Twitter Bootstrap

31 марта 2012

В середине апреля запланирован релиз форка Kickstrap. 15 должно появится обновление за версией Kickstrap v. 0.9 RC.

Kickstrap – это Twitter Bootstrap с расширенными возможностями. На официальном сайте присутствует достаточно амбициозное описание, с перечислением множества дополнительных плюшек, которых нет TB: HTML5 Boilerplate Buildscript, новые наборы иконок, поддержка тем и прочее.

В целом, достаточно интересно, хотя не могу сказать, что возможностей Twitter Bootstrap мне не хватает. Это все же фреймворк и результат ограничивает только фантазия и желание.

Пробежавшись по официальному сайту и туториалу, делают вывод, что продукт пока сыроват. Не работают демо примеры, а их число совсем скромное. Сайт местами работает не так, как предполагается. Количество дополнений тоже пока не впечатляет. Возьмусь выделить только HTML5 Boilerplate Buildscript. Остальное сильно не заинтересовало.

Читать далее »

Использование кэширования. Memcached в действии

24 марта 2012

Я уже публиковал небольшую замету о том, как установить демон Memcached на локальной машине под управлением ОС Windows. Судя по комментариям (еще в старом блоге), информация оказалась достаточно актуальной, и я решил написать еще одну заметку. На этот раз я постараюсь описать базовые принципы кэширования на примере работы с Memcached.

Для эффективного использования кэширующего механизма, необходимо хотя бы немного понимать принципы его работы. Это позволит предупредить возникновение весьма распространенных вопросов.

И так, хранилище Memcached — это хэш-таблица в оперативной памяти. Данные хранятся по модели ключ — значение. То есть, каждая единица данных, которую мы кладем в кэш, записывается с привязкой к конкретному ключу, по этому же ключу данные могут быть получены из хранилища. В отличии от реляционных баз данных, здесь нет никаких автоинкрементов, поэтому уникальность ключей мы отслеживаем самостоятельно.

Читать далее »

Captcha. Использование Zend_Captcha_Image

16 марта 2012

Я хотел бы рассмотреть использование библиотеки Zend_Captcha_Image отдельно от ZendFramework или прочих его компонентов. Это позволит использовать библиотеку в любые проектах, не привнося при этом лишнего кода и не усложняя структуру приложения.

В интернете есть достаточно количество подобных публикацией, с той лишь разницей, что все они рассматривают Zend_Captcha_Image в тандеме с Zend_Form, а я, как уже было написано выше, хотел бы избежать этого. Одна причина, как минимум, у меня имеется. Например, неоднократно приходилось внедрять защитное изображение в CMS, где изначально оно отсутствует. Разумеется, что формы, для которых использовалась captcha, создавались штатными средствами CMS и задействовать Zend_Form было либо невозможно, либо бессмысленно.

Собственно, почему именно Zend_Captcha_Image? Если вам доводилось изучать рынок CMS, то вы не могли не заметить, что в большинстве движков защитное изображение каптчи имеет совершенно одинаковый вид. Очень большую популярность завоевала библиотека, распространяемая сайтом captcha.ru. В итоге, данная каптча прекрасно распознается любым спам ботом, что делает ее совершенно бесполезной.

Читать далее »

Пример разработки WordPress плагина

9 марта 2012

Так как я все больше работаю с WordPress, как в личных целях, так и в рамках рабочих задач, появилось желание написать небольшой цикл статей, посвященный разработке плагинов для этой CMS.

Несмотря на обилие материалов на эту тему, мне хотелось бы поделиться своим видением правильных принципов разработки плагинов. Под правильными принципами я пониманию, как минимум, разделение логики плагина и его представления, как для пользовательской части, так и для панели управления. То, что сам WP не особо практикует такой подход, совсем не повод хардкодить шаблоны в тело скрипта. Более того, никто не мешает использовать ООП. Но об этом несколько позже.

Для создания WordPress плагина достаточно одного файла, имеющего правильный блок описания, который, согласно традициям движка, представляет собой многострочный комментарий. Самым простым примером плагина является Hello Dolly, поставляемый вместе с WordPress именно с целью демонстрации.

Читать далее »

Pattern Singleton – «Одиночка»

4 марта 2012

Паттерн Singleton (одиночка) многие ругают, зачастую, называя его анти паттерном. Тем не менее, он достаточно популярен и я пока не встречал крупных программных систем, где он не был бы реализован. Прежде всего, можно отметить фреймворки, где Singleton нередко выступает основой приложения. Также его часто наследуют компоненты, реализующие взаимодействие с конфигурационными данными или механизмом событий, например.

Основной проблемой данного паттерна является подкупающая простота его реализации и использования. Разработчики, не имеющие достаточного количества опыта, применяют Singleton там, где он совершенно не нужен, тем самым лишая программную систему гибкости и пригодности к адекватному тестированию.

Для того чтобы описать шаблон проектирования, сначала необходимо описать задачу, которую он будет решать.

Предположим, что в вашем приложении есть объект, в котором хранятся данные конфигурации приложения. Разумеется, данные конфигурации должны быть доступны разным частям приложения на всех уровнях.

Читать далее »