Новости и анонсы

Новый функционал, который, вероятно, появится в Joomla 3.7 (часть 2)

Joomla
Добавление в избранное
Сохранить
Новый функционал, который, вероятно, появится в Joomla 3.7 (...

Пока общественность находится в ожидании Joomla 3.7, разработчики работают над реализацией нового функционала, о чем мы говорили в статье Новый функционал, который, вероятно, появится в Joomla 3.7. За прошедшее время появилась дополнительная информация, освещающая детали касательно нового функционала, что небезеинтересно сообществу. Давайте рассмотрим подробнее.

Новый улучшенный роутер

Функционал, который ждали в Joomla годами и который является камнем преткновения, наконец, будет завершен. Пожеланий по улучшению поступило очень много, но очевидно можно сказать, чтои изменения коснутся ID в ЧПУ. Несколько лет назад была организована краудфандинг кампания по сбору средств на написание нового роутера Ханнесом Папенбергом (Hannes Papenberg), что должно было решить такие задачи, как: удаление нежелательных ID из ссылок и корректное отображение модулей (иногда из-за неверного URL ломалась верстка макетов, не имеющих пунктов меню) и удаление дублей страниц.

В свежем анонсе на indiegogo.com Ханнес сказал примерно следующее:

Сегодня 3 важных пул реквеста (запроса на функционал) были объеденены и добавлены в Joomla проект. Удалось исправить ошибки в режиме отключенного ЧПУ, а также внесены исправления в систему роутинга в Joomla 4.0 (полностью роутер будет завершен в версии 4.0), что открывает возможности по опциональному удалению ID из ЧПУ. В общей сумме было затрачено 500 часов кода, а также приведены подробные комментарии и разобран принцип работы, в связи с чем, задачи, поставленные в рамках краудфандинг проекта, считаются выполненными.

Как было сказано выше, новый роутер полностью переписан и закрывает большинство запросов от пользователей. Основной фишкой является опциональное удаление ID из ссылок. Это можно будет осуществить из Менеджера материалов > Настройки > вкладка “Интеграция”

Настройки нового роутера в Joomla
Настройки нового роутера в Joomla

Обратите внимание на новый параметр “URL routing”. По умолчанию его значение выставлено как “Legacy” (режим совместимости со старой версией), но если выставить значение в “Modern”, то получим новый роутер и все ссылки будут отрабатываться по-новому. Соответственно, новый режим роутера лучше включать на новых проектах, чтобы не возникало проблем с уже проиндексированными страницами сайта. Подробно о новом режиме роутера можно узнать, посмотрев видео Брайана Тимэна.

Обратите внимание: если переключить роутер в новый режим, то появится дополнительный связанный параметр “Remove IDs from URLs” (Удаление ID из URL’ов) из названия которого очевидно, какой функционал он выполняет.

Вот так формируется ссылка сейчас:

	index.php / article-list category / 8-debutants
	(index.php / список материалов категории / 8-статья)

А вот пример того, как будет формироваться ссылка новым роутером:

index.php / article-list category / beginners
(index.php / список материалов категории / материал)

Ссылка теперь чистенькая и красивая. В случае использования нового роутера на старых сайтах, не забудьте склеить старые ссылки по 301 редиректу.

Код роутера стал более чистым и понятным с точки зрения разработчика, что упрощает написание собственного роутера для кастомных компонентов. Возможно, роутер будет также допонен новыми фичами к версии Joomla 4, например, возможность задания кастомного URL как в Wordpress. Вот в этом видео интервью с JoomlaDay London 2016 Ханнес рассказывает технические подробности, связанные с роутером. Дмитрий освещал детали реализации нового роутера в нашем материале "О новом роутере Joomla замолвите слово".

Service Layer

Эта возможность малозначима для обычных пользователей, но это несомненно оценят разработчики, пишущие под Joomla. Крис Дэйвенпорт (Chris Davenport) описывает эту возможность следующим образом:

Одна из проблем, с которой зачастую сталкиваются разработчики расширений, это отсутствие чётко определённого API в компонентах (как в сторонних, так и в базовых). Например, чтобы извлечь некоторые данные из статьи компонента com_content, мне требуется устанавливать один из контроллеров com_content или классы модели, но зачастую это неудобно, так как могут проявляться нежелательные побочные эффекты, которые трудно преодолеть. В результате это приводит к ситуации, когда разработчики прибегают к ухищрениям и читают или пишут данные напрямую в таблицы БД стороннего компонента без использования API.

Визуальное представление о service layer даёт следующее изображение, подготовленнное Martin Fowler (см.источник)

Принцип работы Service Layer
Принцип работы Service Layer

Для менее опытных пользователей существует дополнительный абстрактный слой, который упрощает разработчику доступ и использование данных и стандартизирует подход, вне зависимости от того, используете ли вы API Joomla или фреймворк Joomla или даже запускаете свой код при помощи CLI. Образно говоря, реализация Service Layer - это попытка внести упорядоченность в хаос: каждый разработчик сможет применять собственные методы для доступа и обработки данных с наименьшими затратами сил. Стандартизация обработки данных дает больше возможностей по части интеграции Joomla со сторонними веб-сервисами и, что немаловажно, упрощает создание веб сервисов внутри Joomla. Одна из базовых идей - предоставлять возможность быстрого и легкого соединения с REST (и SOAP) сервисами из компонентов и модулей Joomla.

Этот функционал родственнен другой классной штуке, которая еще не реализована в Joomla. Это Web services. На данный момент существуют определенные сложности по части реализации CRUD - Create, Read, Update and Delete operations (процессы по Созданию, Чтению, Обновлению и Удалению) в Joomla. Да, имеется класс JResponseJSON, но он больше подходит для выборки данных из БД вместо процессов по обновлению и удалению. Это является огромным недостатком в случае, если вы планируете использовать современные front-end фреймворки типа Angular, Backbone или React.js, поскольку они созданы для взаимодействия с REST, который, в свою очередь, внедрён в Joomla таким образом, что делает невозможным применение сторонних библиотек. На данный момент нельзя сказать, что Web services будут готовы в Joomla 3.7, однако это луч в конце туннеля, и мы можем надеяться на подобную реализацию в будущем, поскольку Web services находятся в списке предложенных на реализацию возможностей.

Релиз Joomla 3.7 запланирован на декабрь 2016. Все желающие могут помочь команде разработчиков с тестированием нового функционала.

По материалам журнала Cinnk и разработчика шаблонов Gavick.

Eugene Sivokon
Предприниматель, менеджер проектов, Joomla-энтузиаст. Занимаюсь созданием сайтов с 2002 года. Координатор нескольких Joomla проектов. Обожаю путешествовать, интересуюсь историей и изучаю иностранные языки.

Подпишитесь на рассылку новостей CMScafe