Как убрать ID материала из ссылок в Joomla 2.5 и Joomla 3

Главная Создать свой сайт и продвинуть его Создание сайтов Как убрать ID материала из ссылок в Joomla 2.5 и Joomla 3
6 ответ(ов) в теме
не в сети 3 месяца
На сайте с
Участник
0
23:34

Отключение ID материала делается модификацией двух файлов joomla, перед изменением файла делайте бекап (хотя там и не много правок). Так же пока при каждом обновлении джумла придется повторять действия или просто сохранить файлы где-то на компьютере и заменить после обновления системы.

Отключение ID материала в Joomla 2.5 и Joomla 3

В самой Joomla (начиная с версии 1.6) уже предусмотрена функция отключения ID материала из адреса ссылок, но для открытия этой возможности нам нужно добавить в файле: корень_сайта/administrator/components/com_content/config.xml следующие строки (желательно открывать файл через Notepad++):

Спойлер
<field name="sef_advanced_link"
type="radio"
default="1"
label="SEF: Удалить ID материала в ссылке?"
description="Удалить ID материала в ссылке?">
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>

Строки можно добавить в любое вместо, но лучше вначале. Да, и обязательно меняем (или проверяем) кодировку файла: должна быть UTF-8 без BOM, иначе в админке будут крякозябры. 🙂

После добавления этих строк кода, Вы получили возможность включать и отключать ID из ссылок прямо из админки своего сайта. Для этого Вам нужно перейти в менеджер материалов и нажать "Настройки". И в настройках теперь у Вас будет находиться строка: "Удалить ID материала в ссылке?" (в самом верху).

Важно!
Если на некоторых ссылках выскакивает 404 ошибка, то следует в файле _ваш-сайт/components/com_content/router.php найти строку:

Спойлер
// then we assume it is a category. If they don't we assume it is an article
if ($count === 1) {

И заменить её на:

Спойлер
// then we assume it is a category. If they don't we assume it is an article
if ($count === 1 && !$advanced) {

Обратите внимание, что данный параметр может отличаться в разных версиях Joomla.
В Joomla 3:

Спойлер
if ($count === 1 {

В Joomla 2.5 может быть вот так:
Спойлер
if ($count == 1 {

Важно!
Все категории должны быть привязаны к пунктам меню - если этого не будет, то могут возникнуть ошибки при генерации ссылок. Так же обратите внимание, что не будут работать ссылки, если название материала состоит из одного слова. Для решения этого косяка нужно опять открыть файл _ваш-сайт/components/com_content/router.php и найти строку:

Спойлер
->where($db->quoteName('alias'). ' = ' . $db->quote($db->quote($segment)));

заменить её на:

Спойлер
->where($db->quoteName('alias'). ' = ' . $db->quote($segment) );

PS: на форуме joomla уже написали просьбу разработчикам включить такое действие по умолчанию в следующие версии joomla, но когда это будет реализовано на постоянное основе из коробки пока не ясно. beach

Редакции сообщения
0
Stanislavovich
не в сети давно
На сайте с 19.12.2013
Участник
0
22:58

Классная тема автору спасибо

Редакции сообщения
0
Форум
Гость
0
00:06

Подскажите, где нужно подправить. Обновился со старой версии до Joomla 2.5.27, всё прошло нормально только не отображаются материалы которые имеют одиночный алиас, т.е. выскакивает ошибка 404 в материале с одиночным словом http://site.ru/категория/материал. Надо что-то изменить в router.php ?

Этих строк в новой версии нету
->where($db->quoteName('alias'). ' = ' . $db->quote($db->quote($segment)));

Редакции сообщения
0
moto
не в сети 6 минут
На сайте с 12.03.2017
Администратор
Тем 3410
Сообщения 13604
0
00:27

вообще ошибка c однословными материалами только на 3 версии проявляется и исправляется.

Могу посоветовать поставить sef404

Редакции сообщения
0
Форум
Гость
0
09:38

Исправляется только не помню где. у меня была версия 2.5.14 там работало исправление, а в новой версии 2.5.27 где подправить не помню

Редакции сообщения
0
moto
не в сети 6 минут
На сайте с 12.03.2017
Администратор
Тем 3410
Сообщения 13604
0
10:02

Бекап не сохранился? В роутере правится, поищите $db->quote

Редакции сообщения
0

Ваше имя *

Ваш E-mail *

не публикуется

Текст сообщения *