В статье Как в Joomla убрать index.php из url я уже рассказывал какие должны быть параметры в настройках штатных средств SEF Joomla, поэтому предполагается, что вы уже используете эти настройки.
Но этого ещё мало, потому что ссылки будут выглядеть вот так:
В ссылке видно цифру, которая соответствует ID материала.
Для того, чтобы убрать эти ID, потребуется сделать два исправления в файлах Joomla.
1. Правка файла config.xml
Этот файл расположен по следующему пути: корень_вашего_сайта/administrator/components/com_content/config.xml
Как ни странно, но в Joomla выше версии 1.5 уже предусмотрена функция для отключения ID материала из URL, но, почему-то, это не вынесено в настройки.
Действия, описанные ниже, позволят визуализировать эту функцию в настройках материалов.
Итак, необходимо в файле config.xml после строчки description="COM_CONTENT_CONFIG_ARTICLE_SETTINGS_DESC"> добавить код
<field name="sef_advanced_link" type="radio" default="1" label="SEF: Удалить ID материала из URL?" description="Удаление ID материала в ссылке URL"> <option value="0">JNO</option> <option value="1">JYES</option> </field>
В итоге у вас должно получиться следующее:
Теперь, если вы зайдёте в админку сайта, откроете менеджер материалов и выберите "Настройки", то во вкладке "Материалы" будет видна необходимая нам опция.
По умолчанию у нас уже высталено значение "Да", но вы всегда сможете его изменить.
Проделанные действия убирают ID материала из ссылки, но этого не достаточно. Некоторые страницы будут вываливаться с ошибкой 404! Поэтому, обязательно выполните следующий пункт, даже если вам показалось, что в вашем случае всё и так хорошо и ошибок никаких нет!
2. Правка файла router.php
Данный файл расположен по адресу: корень_вашего_сайта/components/com_content/router.php
В этом файле ищем строчку if ($count == 1) и меняем её на if ($count == 1 && !$advanced)
В итоге должно получиться так, как показано на рисунке
для Joomla 3 возможно понадобится в этом же файле изменить
where($db->quoteName('alias') . ' = ' . $db->quote($db->quote($segment)));
на where($db->quoteName('alias') . ' = ' . $db->quote($segment));
Вот теперь ссылки будут без лишних цифр!