WordPress как фреймворк
WordPress является одной из самых популярных систем управления содержимым сайта, учитывая пользовательскую базу и простоту доступа.
Многие известные веб-сайты с богатым контентом используют WordPress в качестве программно-административной части (back-end). Регулярные обновления, большое сообщество, великолепный форум поддержки, обильная документация и многие другие факторы помогли WordPress обогнать его конкурентов.
Первая мысль, которая приходим на ум большинства людей при упоминании WordPress – это блог или платформа управления контентом, но можно взглянуть на него и под другим углом.
Полагали ли вы, что WordPress может также выступать в качестве полноценного фреймворка для разработки веб-приложений?
Существует различные аспекты, на которые нужно обратить внимание перед выбором фреймворка для разработки веб-приложений. В этой статье приведен обзор функций, которые обеспечивает WordPress, если рассматривать его как фреймворк для веб-разработки.
Сообщество, поддержка и документация
WordPress обладает большим сообществом и активным форумом поддержки. Все вопросы, будь то проблемы с установкой, настройкой, разработкой или с чем-то еще, своевременно разрешаются с помощью сообщества технической поддержки. WordPress Codex представляет собой модерируемую сообществом wiki-энциклопедию, которая постоянно обновляется.
Документация – эта первое, что нужно при изучении любого нового языка или фреймворка, и Кодекс WordPress как раз предоставляет необходимую документацию по WordPress. И хотя большинство других фреймворков также может похвастаться этими возможностями, важно отметить, что WordPress не отстает в этом вопросе.
Управление пользователями
В WordPress есть отличный модуль управления пользователями, который включает такой функционал, как регистрация и авторизация пользователей, управление ролями пользователей, назначение полномочий разным ролям и создание новых ролей.
Этот функционал может быть расширен с помощью плагинов, например, Capability Manager, который обеспечивает все упомянутые выше функции, позволяя вам не беспокоиться об управлении сессией или вопросах безопасности.
Если говорить о других фреймворках, то большинство из них предоставляют некоторые решения по управлению пользователями, например, Yii имеет расширение по управлению пользователями, известное как Yii-User, и аналогично для фреймворка CodeIgniter – вы можете найти панель управления пользователями под названием BackendPro, которую можно легко интегрировать в ваш CI проект.
Админ-панель
Кто не хотел бы, чтобы его приложение имело простую в использовании админ-панель, с помощью которой можно было бы управлять контентом интерфейса пользователя? WordPress предоставляет готовую панель администрирования, обладающую большинством параметров, которые вам могут понадобиться.
В дополнение к этому, вы можете создать свои собственные страницы с пользовательскими настройками для самого широкого набора требований. Еще одно преимущество – вам вообще не нужно заботиться о моделировании программной части, WordPress поставляется вместе с собственным набором стилей для серверной панели.
Админ-панель – это та часть, которой не хватает в других фреймворках. Symfony и Yii предоставляют пару расширений для соответствующих фреймворков, с помощью которых можно генерировать интерфейс админки, но функциональное наполнение остается за вами.
Это один из случаев, когда использование системы управления контентом выгодно, но может привести к значительным накладным расходам, если в этой системе не хватает необходимых вам функций, но есть те, которые вам не нужны.
CRUD операции (создание, чтение, обновление, удаление)
Большинство людей ценят помощь фреймворка в исполнении этих базовых операций, поэтому выбор фреймворка, который облегчает их выполнение, является зачастую решающим фактором для многих разработчиков.
Давайте попробуем соотнести это с реальным миром. Если говорить о WordPress, то все объекты являются сообщением. Книга – это сообщение, человек – сообщение, и любой различимый объект – это тоже сообщение. В WordPress они называются Custom Post Types.
Рассмотрим пример с объектом «книга» – Book. Если вы скажите WordPress, что хотите определить для вашего приложения тип сообщения под названием «Book», то в комплекте с ним вы автоматически получите все CRUD операции.
Add / Update Book– это окно редактирования сообщения, создаваемое WordPress по умолчанию, для добавления и обновления книг.
View / Delete Books – это страница со списком книг с опцией удаления.
add_action( 'init', 'create_post_type' );
function create_post_type() {
register_post_type( 'book',
array(
'labels' => array(
'name' => __( 'Books' ),
'singular_name' => __( 'Book' )
),
'public' => true,
'has_archive' => true,
)
);
}
Вся магия скрыта внутри приведенного фрагмента кода, и CRUD операция автоматически генерируется для сообщения типа book.
Вам не нужно писать SQL запросы, вместо этого можно сосредоточиться на бизнес-логике, что делает разработку действительно быстрой.
Если говорить о других фреймворках, то доминирует Yii с его очень простым в использовании интерфейсом CRUD Generator, поддерживаемым модулем GroceryCrud для CodeIgniter, и скаффолдинг в CakePHP.
Правда, тонкая настройка CRUD операций и отношений в базе данных остается за вами, но при желании сделать быстрый старт, оставив улучшения на потом, такое решение можно считать самым оптимальным.
Загрузки и управление медиа контентом
Загрузка файлов и управление медиа контентом является обязательным для всех современных фреймворков, так как в наши дни нельзя представить себе какое-либо приложение без поддержки медиа контента – будь - то изображения, музыка или видео.
WordPress имеет встроенную медиа библиотеку (эти медиа файлы не что иное, как типы вложенных сообщений, как мы уже говорили выше), с помощью которой вы можете загружать медиа файлы и выполнять различные операции, такие как обрезка, переворот, изменение размеров и т.д.
Функции WordPress по работе с изображениями позволяют пользователям использовать загруженные изображения в любом месте пользовательского интерфейса с сохранением гибкости настройки с вашей стороны.
Вы даже можете создать галерею изображений в программно-административной части и отобразить ее в пользовательском интерфейсе.
Если мы отвлечемся от WordPress, то увидим, что Symfony и Yii тоже обеспечивают крутые расширения для управления медиа контентом и загрузкой файлов, но, объективно, ни один из них не богат так, как полностью сформированная система управления контентом типа WordPress.
Это спасет вас от разработки вручную и сэкономит время, позволив вам сначала сфокусироваться на критичных частях бизнес-логики.
Расширяемость и масштабируемость
С точки зрения разработчиков, расширяемость и масштабируемость являются очень важной частью каждого фреймворка. Хуки и фильтры – вот что делает WordPress мощным фреймворком для разработки.
Фильтры
Если вы хотите изменить вывод некоторой функции, заданный по умолчанию, просто передайте его в ваш фильтр и выводите все, что угодно.
Предположим, что вы управляете сайтом-каталогом (со списком всех типов книг с соответствующей ценой) и хотите увеличить отображаемую цену каждой книги на 10 единиц. Ниже приведен код фильтра, который вам нужно будет написать:
add_filter('book_price','custom_book_price');
function custom_book_price($book_price){
$book_price = $book_price + 10;
return $book_price;
}
Код, приведенный выше, добавит 10 единиц к цене каждой книги, что отобразится в представлении. Фильтры представлены в каждом современном высококачественном фреймворке и движке шаблонов.
Хуки
Хуки это не что иное, как вызовы пользовательских функций в определенных точках в цепочке выполнения кода WordPress. Можно даже представить их себе в качестве триггеров.
Предположим, вы хотите получать уведомления по почте, когда создается новая запись в вашем приложении. Для этого, вам нужно будет подключить пользовательскую функцию к publish_post – WordPress хуку по умолчанию:
add_action('publish_post','custom_mail_admin');
И теперь все, что вам нужно – это реализовать функцию custom_mail_admin, и она будет выполняться автоматически всякий раз, когда публикуется новое сообщение.
Хуки и фильтры вместе составляют мощный дуэт, и являются одной из главных причин удачной эволюции WordPress в фреймворк веб-разработки для очень многих компаний.
В определенной степени хуки поддерживаются всеми основными фреймворками, но различаются по времени срабатывания.
Очевидно, что такой фреймворк, как, например, Kohana, не будет иметь хук «publish_post», но может иметь «post-controller» хук (и имеет – в виде system.post-controller), который запускается после завершения контроллером выполнения его действий.
URL маршрутизация и адреса URL, дружественный для SEO
Это очень важный параметр, если вы хотите создать новостное приложение или веб-сайт. Как мы все знаем, структура URL- адресов играет очень существенную роль в SEO, а в WordPress есть мощная функция Permalink, с помощью которой вы можете использовать разные типы постоянных ссылок для контента или страниц в зависимости от ваших требований.
Перезапись URL также играет критическую роль в сложных веб-приложениях, когда URL содержит в себе много GET параметров и становится слишком длинным и сложным.
Также как и многие фреймворки, WordPress предоставляет Rewrite API, с помощью которого вы можете поиграть со структурой URL адресов и настроить их под ваши нужды, хотя по общему признанию, именно WordPress делает это в невероятно дружественной пользователю манере.
Почти все фреймворки обеспечивают URL маршрутизацию, среди которых Laravel предоставляет достойный, удобный API маршрутизации, поддерживаемый Yii, Zend, CakePHP и другими.
Кэширование
Если вы планируете высокопроизводительное приложение, обслуживающее миллионы пользователей, то вам нужен подходящий механизм кэширования. В WordPress есть встроенный механизм Transient API, который обеспечивает функцию кэширования на уровне базы данных для применения в вашем приложении.
Если вы ищете более продвинутые механизмы кэширования с полным контролем в ваших руках, тогда такие плагины, как W3 Total Cache, удовлетворят вашему желанию. Используйте этот способ управления кэшем без больших накладных расходов.
И снова, большинство фреймворков поддерживают эту функцию. Примером могут служить Yii и Laravel, оба обеспечивают очень простой механизм кэширования, пожалуй, лучше, чем WordPress, с помощью которого вы можете улучшить производительность вашего приложения.
Шаблоны
Шаблоны WordPress имеют дело с представлением вашего контента. Если вы знакомы с архитектурой MVC, то можно отнести шаблоны к представлениям. Одной странице может быть назначено несколько шаблонов. Поэтому даже при одинаковых данных оформление будет отличаться.
Если рассматривать другие фреймворки, то нужно отметить Laravel и Phalcon, в которых есть восхитительные встроенные движки шаблонов, хотя и другие фреймворки тоже имеют свои собственные решения.
А что насчет MVC?
Это все были основные особенности, которые делают WordPress полноценным фреймворком для разработки веб-приложений, если сравнивать его с другими системами на рынке фреймворков, но что можно сказать о MVC?
Сегодня практически любой веб-фреймворк придерживается архитектуры MVC.
WordPress не следует этой архитектуре из-за целенаправленной поддержки обратной совместимости с предыдущими внедрениями. Несмотря на это, были сделаны усилия для поддержки в WordPress MVC модели – вы можете попробовать WP MVC и Tina MVC.
Заключение
WordPress отнюдь не является прямой заменой другим фреймворкам, но служит приличной альтернативой, предоставляя большинство, если не все функции, входящие в уже распространенные фреймворки.
Единственным поводом для волнения может быть его производительность и накладные расходы из-за функций, которые возможно не потребуются для конкретного приложения, но поскольку разработка функционала на нем продолжается, WordPress на самом деле может соперничать с некоторыми лучшими фреймворками, несмотря на то, что это «всего лишь» система управления контентом.