
Новая система роутинга в Joomla! 3.8
С выходом версии Joomla! 3.8 было сделано одно из наиболее ожидаемых улучшений для этой CMS — новая система роутинга URL адресов (ссылок) сайта. Как всегда, при разработке новой возможности была оставлена совместимость со старым вариантом роутинга, что позволит нормально функционировать компонентам, которые еще не перешли на новый роутер. При этом системные компоненты (Материалы, Контакты, Пользователи и Ленты новостей) уже поддерживают новый роутер со всеми его возможностями, которые более подробно рассмотрены ниже.
Введение
Новая система роутинга позволяет разработчикам упростить процесс написания кода роутера, а администраторам использовать больше параметров роутинга для настройки процесса формирования URL адресов (в том числе и очень важную возможность удаления ID элементов из URL адреса).
Начиная с Joomla! 3.8, для компонентов, поддерживающих новый роутер, есть возможность его запуска в одной из трех различных конфигураций:
- текущая система роутинга (которая будет оставаться по умолчанию для новых установок и рекомендована при обновлении существующих сайтов)
- новая система роутинга
- новая система роутинга с удаленным ID элементов
В итоге обновляться можно не опасаясь, что на сайте неожиданно изменяться URL адреса страниц.
Внимание!
Новые URL адреса, генерируемые новой системой роутинга, не на 100% совместимы с существующим роутером. В связи с этим для существующих сайтов не рекомендуется переходить на новый роутер без предварительной тщательной проверки всех существующих URL адресов. При переходе на новый роутер нужно устранить изменения URL либо выполнить 301 редирект (Moved Permanently) со старого URL на новый.
Для новых сайтов рекомендуется использовать новую систему роутинга.
Изменения в URL
Рассмотрим несколько примеров URL адресов при включенной опции SEF. Это две страницы из набора тестовых материалов с каждой из перечисленных выше опций роутинга:
-
Страница категории Animal Photo Gallery
-
Текущий роутинг -
/article-categories/72-park-site/photo-gallery/animals
-
Новый роутинг с ID элементов -
/article-categories/26-park-site/28-photo-gallery/72-animals
-
Новый роутинг без ID элементов -
/article-categories/park-site/photo-gallery/animals
-
Текущий роутинг -
-
Страница Koala Article
-
Текущий роутинг -
/article-categories/72-park-site/photo-gallery/animals/25-koala
-
Новый роутинг с ID элементов -
/article-categories/26-park-site/28-photo-gallery/72-animals/25-koala
-
Новый роутинг без ID элементов -
/article-categories/park-site/photo-gallery/animals/koala
-
Текущий роутинг -
Числа в URL - это ID соответствующих категорий и статей в базе данных Joomla!.
Если новый роутер и опция Remove ID включены, идентификаторы удаляются из URL страницы. Это позволяет создать более чистые и дружественные URL адреса, что будет полезно как для пользователей сайта, так и для SEO.
Как включить новый роутинг в Joomla! 3.8
Роутинг для URL адресов в Joomla! включается как всегда в общих настройках сайта. Если же нужно включить его новый алгоритм работы, например, для материалов Joomla!, то нужно зайти в настройки компонента материалов. Для этого в главном меню административной части сайта переходим в пункт Материалы / Менеджер материалов и нажимаем на кнопку Настройки в правой верхней части страницы. После этого переходим на вкладку настроек Интеграция и видим новый пункт URL Routing со значениями Stable и Experimental.

При выборе Experimental варианта настройки URL Routing становится доступным пункт Remove IDs from URLs. При установке значения в Да, ID элементов (в данном случае категорий и материалов) будут удалены из URL адреса материала.
Аналогичные настройки доступны для компонентов Контакты, Пользователи и Ленты новостей.
Примечание
Еще раз отметим, что применение нового алгоритма роутинга Joomla! может изменить URL страницы, в следствии чего существующий (и проиндексированный поисковыми системами) URL страницы может отдавать 404 ответ (страница не найдена). Разработчики продолжают обсуждать идеи плана миграции, чтобы сохранить старые URL адреса.
Что ожидает роутинг Joomla! в будущем?
Судя из интервью с Hannes Papenberg (который и является ведущим разработчиком нового роутера) в Joomla! 4 планируется полностью избавиться от старой системы роутинга. Это вполне логично, поскольку при смене мажорной версии в релизе поддержка обратной совместимости является не обязательной, а удаление старого кода упрощает поддержку и дальнейшую разработку CMS. В итоге с выходом Joomla! 4 разработчики расширений должны будут учесть эти изменения и внести соответствующие правки в свой код, чтобы обеспечить поддержку новой системы роутинга.
Здесь же Hannes Papenberg акцентирует внимание на преимуществах нового роутера для разработчиков дополнений и администраторов сайтов, среди которых можно выжелить:
- меньше кода при написании роутера, сам код более простой и понятный
- роутер пишется в виде php класса на основе базового, следуя принципам ООП
- сторонние разработчики получат возможность модификации поведения роутера без правки файлов ядра приложения
- более производительный код
- отсутствие дублей контента
После удаления старого роутера в Joomla! 4 команда разработчиков планирует уделить внимание расширению опционального функционала нового роутера.
Выводы
Владельцам сайтов перед обновлением Joomla! до версии 4 стоит проверить все расширения на корректность работы с новым роутером, отладить процесс миграции старых ссылок на новые и переходить на новый роутинг Joomla!. К этому времени все популярные компоненты Joomla! уже должны будут использовать возможности новой системы роутинга и решить вопрос корректного переезда при изменении URL адресов. Паниковать тут точно не стоит, поскольку всегда есть вариант 301 редиректа со старых URL на новые. Вопрос только в автоматизации процесса.
Стоит также отметить, что имеющийся (старый) алгоритм роутинга у системных компонентов (Материалы, Контакты, Ленты новостей и т.д.) уже давно позволяют добиться того, чтобы убрать ID элемента из URL адреса страницы. На этот счет написана масса материалов, искать стоит ключевое слово sef_advanced_link
. Это имя параметра, который можно добавить в конфигурационный файл компонента и добиться желаемого эффекта. Для тех, кто пользуется этой возможностью, переход на новый роутер должен быть абсолютно безболезненный, если в новом роутере выбрать параметр удаления ID элементов. В этом случае ссылки страниц должны остаться прежними.
Примечание
Обратите внимание, что при добавлении параметра sef_advanced_link, например, в компонент материалов Joomla! вы никак не затрагиваете код самого роутера, все нужное уже есть в нем. Но поскольу самого параметра sef_advanced_link в конфигурационном файле нет, то он может быть уничтожен при обновлении Joomla!. Если в конфигурационный файл компонента материалов будут внесены изменения разработчиками и он попадет в очередной релиз Joomla!, то после обновления параметр sef_advanced_link пропадет из файла и со страницы настроек, но (ВНИМАНИЕ!) не из базы данных, где хранятся настройки после сохранения. Получается, что после обновления Joomla! параметра на странице настроек нет, но действовать он продолжает. Проблемы могут возникнуть, только если повторно сохранить настройки после обновления Joomla!. В этом случае значения настроек будут переписаны в базе данных уже без параметра sef_advanced_link, а в коде будет использоваться его значение по-умолчанию - 0. В этом случае ID элементов (например, материалов на сайте) снова будут добавлены в URL адреса. Так что будьте внимательны, сохраняя настройки компонента материалов (или других системных компонентов, где необходимо убрать ID элементов из URL) после обновления Joomla!