Начнем с определения, что такое веб-приложение и чем оно отличается от веб-сайта или веб-службы. На самом деле, эта книга поможет вам создать с помощью WordPress все, что угодно: веб-сайты, темы, плагины, интернет сервисы и веб-приложения. Мы решили сосредоточиться на веб-приложениях, потому что их можно воспринимать как супер-сайты, которые используют все методы, которые мы хотим рассмотреть.
Многие люди считают, что WordPress недостаточно мощный или не предназначен для создания веб-приложения, и мы обсудим это позже. Мы уже много лет создаем веб-приложения с помощью WordPress. С помощью WP можно создавать масштабируемые приложения. В этой главе мы расскажем, почему WordPress — отличная платформа для этих целей. Мы также рассмотрим некоторые ситуации, когда использование WordPress в качестве платформы для веб-приложения, не лучшее решение.
Что такое веб-сайт?
Веб-сайт — это набор из одной или нескольких веб-страниц, содержащих информацию, доступную через веб-браузер.
Что такое приложение?
Нам нравится определение из Википедии: «Прикладное программное обеспечение, также известное как приложение, предназначенное для помощи пользователю в выполнении конкретных задач ».
Что такое веб-приложение?
Веб-приложение — это просто приложение, запускаемое через веб-браузер. Обратите внимание, что в некоторых веб-приложениях использование браузера скрыто, например, когда происходит интеграция вашего веб-приложения в приложение для Android или iOS.
Особенности веб приложений
Веб приложение необходимо для того, чтобы при помощи него, пользователь решал свою задачу. Сайт же, представляет в большинстве случаев, некоторую логическую единицу, из html страниц, содержащих контент. Следовательно, традиционно, для сайтов используют CMS, а для приложений — фреймворки.
Ниже приведены аспекты, наличие которых приближает веб-сайт к веб-приложению:
- Интерактивные элементы
Типичный опыт работы с веб-сайтом включает в себя навигацию по страницам, прокрутку и нажатие гиперссылки. Веб-приложения также могут иметь ссылки и прокрутку, но, как правило, используют другие методы навигации по приложению.
Веб-сайты с формами предлагают транзакционные возможности. Примером может служить контактная форма или форма заявки на странице вакансий на сайте компании. Формы позволяют пользователям взаимодействовать с сайтом.
Веб-приложения будут иметь еще больше интерактивных элементов пользовательского интерфейса. Например: панели инструментов, перетаскивание элементов, редакторы форматирования текста, слайдеры.
- Функционал, а не контент
Помните, что веб-приложения «созданы, чтобы помочь пользователю выполнять определенные задачи». Карты Гугл, тут пользователи получают маршруты проезда. Пользователи Gmail пишут электронные письма. Пользователи Trello управляют списками. Некоторые приложения по-прежнему ориентированы на контент. Типичный сеанс с приложением Facebook или Twitter включает около 90% чтения.
- Учетные записи
Логины и учетные записи позволяют веб-приложению сохранять информацию о своих пользователях. Эта информация используется для облегчения выполнения основных задач приложения и обеспечения постоянного взаимодействия.
- Использование возможностей устройства
Веб-приложения, запущенные на вашем телефоне, могут получить доступ к камере, адресной книге, внутреннему хранилищу и информацию о местоположении — GPS. Веб-приложения, запущенные на рабочем столе, могут получить доступ к веб-камере или локальному жесткому диску.
- Возможность работать оффлайн
Желательно, чтобы ваши веб-приложения работали оффлайн. Электронные письма можно создавать в Gmail оффлайн. Evernote позволит вам создавать и редактировать заметки в автономном режиме.
- Мэшапы (Mashups)
Веб-приложения могут связывать результаты работы нескольких веб-приложений и в результате получать полностью новый функционал. Веб-приложение может использовать различные веб-службы и API для передачи и извлечения данных. У вас может быть веб-приложение, которое, например, объединяя картографические данные Google Maps с данными о недвижимости с Craigslist, получает новый уникальный веб-сервис, изначально не предлагаемый ни одним из источников данных.
Зачем использовать WordPress?
Ни один язык программирования или программный инструмент не подходят для любой работы. Есть ситуации, когда WP плохой выбор, но сейчас о тех, когда это отличное решение.
- Вы уже используете WordPress
Если вы уже используете WordPress для своего основного сайта, в WordPress есть отличные плагины для электронной коммерции (WooCommerce), форумы (bbPress), сайты членства (платное членство Pro), функции социальных сетей (BuddyPress) и геймификации (BadgeOS).
Встраивание вашего приложения в существующий сайт на WordPress сэкономит ваше время и упростит задачу вашим пользователям. Итак, если ваше приложение довольно простое, вы можете создать плагин, на своем сайте, под управлением WP для программирования функциональности вашего веб-приложения.
Если вас устраивает ваш существующий сайт на WordPress, вас не должны сбивать с толку, люди говорящие, что вам необходимо перейти на другую технологию, чтобы добавить на ваш сайт определенные функции. Скорее всего, это неправда и отказываться от проделанной работы не стоит. Ниже приведены аргументы придерживаться WP.
- Управление контентом с WordPress — легко
WordPress был разработан сначала, как платформа для ведения блогов, но с годами и с введение пользовательских типов записей (CPT) в версии 3.0, он превратился в полностью функциональную систему управления контентом (CMS). Любую страницу или сообщение могут редактировать администраторы через панель управления, доступ к которой можно получить через веб-браузер.
WordPress упрощает добавление и редактирование контента с помощью редактора WYSIWYG, поэтому вам не нужно привлекать веб-дизайнеров каждый раз, когда вы хотите внести простые изменения в свой сайт. Вы также можете создать настраиваемые меню и элементы навигации для вашего сайта, не касаясь кода.
- Легкое и безопасное управление пользователями
В WordPress есть все необходимое для добавления на ваш сайт как администраторов, так и конечных пользователей. Помимо контроля доступа к контенту, в WordPress есть система ролей и возможностей позволяющая определить какие действия доступны для той или иной группы пользователей. Например, по умолчанию пользователи с ролью участника могут добавлять новые записи, но не могут их публиковать.
- Плагины
В репозитории WordPress более 55 000 бесплатных плагинов. Есть еще много платных плагинов, плагинов премиум-класса. Всякий раз, когда есть мысли о том, что необходимо расширить функционал сайта, есть высокая вероятность, что плагин удовлетворяющий ваш запрос, уже существует. А это может сэкономить деньги и время. Есть несколько незаменимых плагинов, которые мы, в конечном итоге, используем почти на каждом сайте. Для большинства веб-сайтов вам нужно кэшировать вывод для более быстрого отображения, использовать Google Аналитику, создавать карту сайта, производить настройки параметров страниц для поисковой системы (SEO), а также ряд других распространенных задач. Для всех этих функций существует множество хорошо поддерживаемых плагинов. Освещать наших фаворитов, решающих эти и другие задачи мы будем в течении всей книги.
- Гибкость важна
WordPress — это полноценный фреймворк, способный на многое. Кроме того, WordPress построен на технологии PHP, JavaScript и MySQL, так что все, что вы можете построить на PHP / MySQL можно достаточно легко прикрутить к вашему приложению WordPress. WordPress и PHP / MySQL в целом не идеальны для каждой задачи, но они хорошо подходят для широкого круга задач. Наличие единой платформы, которая будет расти вместе с вашим бизнесом, может позволить вам реализовывать задуманное быстрее. Например, вот типичное развитие веб-сайта, работающего на WordPress:
1. Объявите о своем стартапе на одностраничном веб-сайте.
2. Добавьте форму для сбора адресов электронной почты.
3. Добавьте блог.
4. Сосредоточьтесь на SEO и оптимизируйте весь контент.
5. Отправляйте записи блога в Twitter и Facebook.
6. Добавьте форумы.
7. Используйте плагин Paid Memberships Pro, чтобы позволить участникам платить за доступ.
8. Добавьте настраиваемые формы, инструменты и уникальное поведение приложения для участников, которые оплачивают услугу.
9. Обновляйте пользовательский интерфейс с помощью AJAX.
10. Настройте сайт и сервер для масштабирования.
11. Локализуйте сайт / приложение для разных стран и языков.
12. Запустите обертки iOS и Android для приложения.
Прелесть этого пути заключается в том, что на каждом этапе у вас есть та же база данных пользователей и используете вы, одну платформу разработки.
- Частые обновления системы безопасности
Тот факт, что WordPress используется на миллионах сайтов, делает его мишенью для хакеров, пытающихся взломать его. Некоторые из этих хакеров добивались успеха, однако разработчики WordPress быстро устраняют уязвимости и выпускают обновления для их исправления. Это похоже на то, что миллионы людей постоянно тестируют и исправляют ваше программное обеспечение, по сути так и происходит. Базовая архитектура WordPress делает применение этих обновлений быстрым и безболезненным. WordPress — гораздо более безопасная платформа для вашего сайта, чем что-либо еще. Безопасность более подробно обсуждается в главе 8.
- Стоимость
WordPress бесплатный, PHP бесплатный, MySQL бесплатен. Большинство плагинов бесплатны. Хостинг стоит денег, но в зависимости от того, насколько велико ваше веб-приложение и сколько трафика вы получаете, оно может быть относительно недорогим. Если вам требуются специальные функции, которых нет ни в одном из существующих плагинов, вам может потребоваться заплатить разработчику, чтобы он его сделал. Или, если вы сами являетесь разработчиком, это будет стоить вам только времени. Давайте сравним создание простого веб-приложения с нуля, на базе WordPress с .NET.
Приложение .NET
1. IIS — Платная лицензия
2. SQL Server — Платная лицензия
3. Разработчики .NET обычно стоят больше, чем разработчики PHP.
4. Нужно платить за создание надежной схемы базы данных.
5. Нужно платить за создание вспомогательных функций для перемещения данных в базу данных и из нее.
6. Нужно платить, чтобы создать функционал авторизации для ваших пользователей.
7. Нужно платить за разработку любых необходимых вам функций.
8. Безопасность! Вы не представляете, как ваше приложение будет противостоять атакам из Интернета, и нужно снова заплатить, чтобы попытаться сделать ваше приложение максимально безопасным.
Приложение WordPress
1. Apache — 0 долларов
2. MySQL — 0 долларов
3. PHP-разработчики обычно стоят меньше, чем .NET-разработчики, и намного круче! Это факт.
4. WordPress имеет проверенную схему базы данных, готовую к работе.
5. WordPress имеет множество вспомогательных функций для взаимодействия с базой данных, и в большинстве случаев вы можете использовать CPT и таксономии для хранения и категоризации данных без особого кодирования.
6. В WordPress уже есть надежный процесс входа в систему.
7. Вы можете получить множество необходимых функций с помощью бесплатных плагинов.
8. Безопасность! WordPress работает примерно на 32% всех веб-сайтов в Интернете. Вы можете быть уверены, что это одна из самых безопасных платформ.
Короче говоря, вы можете создать приложение любого размера поверх WordPress, и в девяти случаях из 10 это будет стоить меньше денег и времени на разработку, чем на любой другой платформе.
Ответы на распространенную критику WordPress
Некоторые критики скажут, что WordPress не очень хороший фреймворк для создания веб-приложений, или что это вообще не фреймворк. При всем моем уважении к тем, кто придерживается таких взглядов, мы хотели бы рассказать, на чем основано наше несогласие.
WordPress предназначен только для блогов. Многие люди считают, что поскольку WordPress был создан для ведения блога, он хорош только для этого. Подобные утверждения были верны много лет назад, но с тех пор WordPress внедрил мощную функциональность CMS. А это делает его очень полезным для всех сайтов ориентированных на контент. Как результат, это сейчас самая популярная CMS, с долей рынка более 59%.
На рис. 1-1 показан слайд из презентации Мэтта Мулленвега «Состояние WordPress» на WordCamp San Francisco 2013. Перевернутая пирамида слева представляет состояние примерно 2006 года. Большая часть кода которого посвящена функционалу блога, меньше CMS и остаток — код платформы, поддерживающий это все. Пирамида справа представляет текущее состояние WordPress. Как видим, тут все наоборот. WordPress — гораздо более стабильная и функциональная платформа, чем это было всего несколько лет назад.

Рисунок 1-1. Диаграммы из презентации Мэтта Мулленвега «Состояние WordPress» 2013 год.
Собственно говоря, ответ на комментарий, что WP подходит только для информационных сайтов такой — да, для всех кому нужна платформа для контент-ориентированного сайта, WP лучший выбор. Но! Его платформа позволяет делать и отличные интерактивные приложения, что мы покажем в этой книге.
WordPress не масштабируется. Некоторые укажут на примере установки стандартного WordPress на виртуальном хостинге, и обратят ваше внимание на то, как сайт замедляется или падает при большой нагрузке, из этого сделают вывод, что ВП не масштабируется. Это утверждение явно ложно. WordPress.com работает на том же базовом программном обеспечении, что и любой другой сайт WordPress и является одним из самых посещаемых сайтов в мире. Проблемы с масштабированием WordPress такие же, как и с масштабированием любого приложения: кэширование страниц и данных и скорость вызовов базы данных и обработка результатов. Например, TechCrunch и New York Times спокойно масштабируются на WordPress. Так же, большинство практик, извлеченных из масштабирования приложений на PHP / MySQL, применимы и к WordPress.
WordPress небезопасен. Учитывая, что ВП является ПО с открытым исходным кодом, можно сделать вывод, что он не безопасен. Но тут срабатывает обратная логика. Так как ВП используют миллионы людей, каждая дыра становится явной и быстро закрывается офф. разработчиками или кем-то из сообщества. Т.е. это явно более безопасно, чем не знать о уязвимостях вашего приложения до тех, пор пока не станет поздно.
Существующие плагины для WP — г***о. Возможно, что частично это утверждение верно. Но! Лишь частично. Существуют тысячи плагинов, высочайшего качества. Но, даже если для вашей задачи есть низкокачественный бесплатный плагин, это лучше, чем нет вообще ничего. Ну и никто не мешает вам исправить/дописать в нем то, что вы считаете необходимым.
Когда не стоит использовать WordPress
- Если вы планируете лицензировать или продавать, по особым условиям, технологии своего сайта.
- Если у вас есть команда разработчиков, например на RUBY, то лучше использовать эту технологию.
- Если тот или иной фреймворк на 80% соответствует вашим потребностям, а на ВП нет ничего подобного.
- Когда гибкость платформы менее важна, чем оптимизация и производительность
- Когда приложение должно работать в режиме реального времени и быть полностью асинхронным. Так как в типичной настройке WordPress пользователь посещает URL-адрес, который попадает в веб-сервер (например, Apache) через HTTP, запускает PHP-скрипт для создания страницы, а затем возвращает полную страницу пользователю. Для таких ситуаций лучше использовать, что-то основанное на технологиях типа node.js, написанных для таких задач.
WordPress как платформа приложения
Системы управления контентом, такие как WordPress, Drupal и Joomla, часто не учитываются в обсуждении фреймворков, но на самом деле WordPress (в частности) полностью соответствует понятию — хороший фреймворк для приложения. Всего за несколько минут вы можете установить WordPress и получить полнофункциональное приложение с возможностью регистрации пользователей, управление сеансами, управление контентом и панель мониторинга активности сайта и т.д. На рисунке 1-2 показан прямоугольный треугольник из презентации Mullengweg «Состояние WordPress в 2013 году»., так вот мы видим платформу/фреймворк, на которой базируется функционал для CMS и блога, идущие как бы в комплекте.

Рисунок 1-2. Платформа WordPress
WordPress против фреймворков MVC
MVC означает — «модель представление контроллер» и является распространенным шаблоном проектирования, используемым во многих программах. Основные преимущества использования архитектуры MVC — это возможность повторного использования кода и разделение проблем. WordPress не использует архитектуру MVC, но работает по-своему поощряя повторное использование кода и разделение проблем. Я очень кратко объясню архитектуру MVC и то, как она соотносится с процессом разработки WordPress. Этот раздел должен помочь читателям, знакомым с фреймворками на основе MVC, понять, как подходить к разработке на WordPress, аналогичным образом. На рис. 1-3 показано типичное приложение на основе MVC. Конечный пользователь использует контроллер, который манипулирует состоянием приложения и данными с помощью модели, которая затем обновляет представление, отображаемое для пользователя. Например, в приложении блога пользователь может просматривать страницу последних записей (представление). Пользователь щелкает заголовок сообщения, что ведет к новому URL-адресу (контроллер), который загрузит данные публикации (модель) и отобразит отдельную публикацию (представление).

Рисунок 1-3. Как работает MVC
Архитектура MVC, поддерживая разделение задач, позволяет дизайнерам сосредоточить свое внимание на представлениях, а программисты сосредотачивают свое внимание на моделях. Вы можете попробовать использовать архитектуру MVC в WordPress. Однако, — это может привести к проблемам. Вместо этого, мы предлагаем вам выбрать «WordPressWay», как описано в этой книге. Тем не менее, если вам интересно, плагин WP MVC находится в активной разработке и помогает вам использовать MVC в WordPress.
Модели = плагины
В MVC, код, который хранит базовые структуры данных и бизнес-логику, располагается в моделях. Именно здесь программисты проводят большую часть своего времени. В WordPress плагины — подходящее место для хранения новых структур данных, сложной бизнес-логики и определения пользовательских типов записей. Это сравнение не точно по двум причинам. Во-первых, многие плагины добавляют функциональность, соответствующую представлению и содержат элементы дизайна. Возьмите, например, любой плагин, который добавляет виджет, для вывода на ваших страницах. Один из способов сделать разделение этих вопросов более явным, — в плагине можно сделать папку “шаблоны” или “страницы” и туда вынести код пользовательского интерфейса. Также можно реализовать переопределение шаблона, т.е. в папке основной темы переопределить шаблон плагина. Это позволит всем шаблонам находится в одной директории.
Представления = темы
В среде MVC код для отображения данных пользователю, записывается в представлениях. Тут дизайнеры проводят большую часть своего времени. В WordPress темы — подходящее место для хранения кода шаблонов. Опять же, сравнение здесь не однозначно, но «views = themes» — хорошая отправная точка.
Контроллеры = загрузчик шаблонов
В модели MVC, код для обработки пользовательского ввода (форма, URL-адреса передающие параметры методом GET или POST) позволяет решить, какие модели и представления использовать для обработки запроса. Код контроллера часто настраивается один раз, и далее, о нем забывают. В WordPress все запросы страниц обрабатывается в соответствии с иерархией шаблонов. В загрузчик шаблона попадают параметры передаваемые в url и на основе этих параметров он определяет, какой файл шаблона следует использовать для отображения страницы. Например, для отображения результатов поиска будет использован шаблон из файла search.php, single.php для отображения отдельного сообщения и т. д. Поведение по умолчанию можно дополнительно настроить с помощью API WP_Rewrite.