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 на самом деле может соперничать с некоторыми лучшими фреймворками, несмотря на то, что это «всего лишь» система управления контентом.

РедакцияПеревод статьи «WordPress as a Framework»