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

Но радость в моём случае длилась не так долго как хотелось бы. Пришлось в моей практике разрабатывать AJAX-плагин, который как раз выводился на той странице, где применялся новый маршрутизатор, и, что в итоге получилось читайте ниже.

И так, всё по порядку. В статье буду использовать тестовый простой ajax-плагин. В данной статье используется, чисто установленная Joomla версии 3.8.6.

1. Корректная работа.

 Рассмотрим вариант нормальной работы ajax.

1oknorouter min

Получаем ответ:

2oknorouter min

2. Воспроизведение ошибки.

Теперь начнем разбор полёта и повторим ошибку. Для начала необходимо включить ЧПУ (SEF) и "Перенаправление URL" параметры, далее переименовать конфигурационный файл сервера.

3enableredirecturl min

Теперь когда мы подготовили человекопонятные ссылки, переходим в общие настройки материалов и включаем "экспериментальный" маршрутизатор:

3routerenabled min

ВНИМАНИЕ!
Чтобы роутер заработал, необходимо создать пункт меню с типом "Блог категории", для материалов которые вы хотите видеть без ID.
Иначе роутер совсем не будет отрабатывать выводя страшные ссылки.

Когда всё сделали переходим к материалу и запускаем передачу данных с помощью AJAX

4dontworkajaxrouterenabled min

Как можно видеть сервер нам вернул ошибку 500, в моём примере это "URL invalid".

3. Решение проблемы.

 Для исправления данной проблемы, я пока нашел только один вариант, это внести строчку которая пофиксит использование Ajax приходящий в сам маршрутизатор.

Откройте файл 'components/com_content/router.php' и пропишите в начало конструктора следующее:

 // fix ajax
 if( $app->input->get('option') == 'com_ajax' ) return;

zipПример исправленного роутера для com_content (размер: 1.86 kb, скачиваний: 5)

В результате уже увидим правильно отработанный ajax:

5fixrouter min

 Потому, как ошибка существует вплоть до новой версии (3.8.6), то она встречается довольно редко среди джумловых юзеров, поэтому до официального исправления в новых релизах, думаю статья будет полезной, рад был помочь.

Просто поддержать нас
Создание сайтов

Читайте также:

Полезное из Web