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

Категория: Настройка стандартных расширений - .

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

Приветствую Вас, уважаемые посетители моего блога о Joomla. В данной статье я покажу Вам, как можно быстро и безопасно избавиться от ID (идентификатор) материала в адресе ссылки в Joomla 2.5 и Joomla 3.

Как известно, движок Joomla добавляет в URL числовой идентификатор, который является, грубо говоря, порядковым номером материала или категории. В принципе, в нем нет ничего плохого, но выглядеть такая ссылка будет не очень красиво. Однако учтите, что ID - это специальный числовой номер, который присваивается каждому материалу отдельно. Служит он для уникализации ссылки в случае одинакового названия заголовков (например, у Вас есть 2 статьи с одинаковым названием - вот для их различия и существует ID). Соответственно, при его отключении, нельзя будет давать материалам одинаковые названия (только если они не будут находится в разных категориях).

Вот так выглядит ссылка с ID в адресе: _http://joofaq.ru/poleznie-stati-dlya-vebmastera/onlayn-servisi/68-reg-ru-domeny-hosting-servera

Нам же нужно сделать ссылку без ID: _http://joofaq.ru/poleznie-stati-dlya-vebmastera/onlayn-servisi/reg-ru-domeny-hosting-servera

Удалить идентификаторы из адреса ссылок можно с помощью специальных расширений, таких как ARTIO JoomSEF, SH404SEF и других аналогичных программ для создания красивых ЧПУ ссылок, но эти компоненты несут большую нагрузку на сервер и устанавливаются в крайнем случае. Как правило, их ставят тогда, когда на сайте используются другие компоненты, для которых не получается сделать ЧПУ ссылки стандартным SEF плагином Joomla.

Мы же будем реализовывать удаление ID из ссылок с помощью небольших модификаций в системных файлах. Главное - не забывайте сохранять данные файлы при обновлении Joomla!

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

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

<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 материала в ссылке?":

Удалить ID материала в ссылке?

Нажимаете "Да". После этого очистите кэш сайта. Теперь ссылки в Joomla 2.5 будут отображаться без 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) );

Только не забудьте, что при обновлении Joomla этот файл будет заменен! Поэтому настоятельно рекомендую сохранить его в отдельном месте, чтобы потом заново не вносить изменения.

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

Второй метод так же работает на Joomla 2.5 и Joomla 3. Но его минус в том, что при каждом обновлении движка нужно будет заново вносить эти изменения или просто перезаписывать файл роутера поверх нового. Итак, в этом способе мы будем работать только с файлом _ваш-сайт/components/com_content/router.php.

Для начала найдите строку (примерно 27 строка):

$advanced = $params->get('sef_advanced_link', 0);

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

$advanced = $params->get('sef_advanced_link', 1);

Затем найдите вот эту строку (в Joomla 2.5 - 228 строка, в Joomla 3 - 250):

$advanced = $params->get('sef_advanced_link', 0);

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

$advanced = $params->get('sef_advanced_link', 1);

Теперь опускайтесь чуть ниже (в Joomla 2.5 - строка 228, в Joomla 3 - строка 272) и находите вот этот кусок кода:

if (strpos($segments[0], ':') === false)
{
$vars['view'] = 'article';
$vars['id'] = (int) $segments[0];
return $vars;
}

И закомментируйте его (при комментировании, код перестает обрабатываться), чтобы получилось вот так:

/*if (strpos($segments[0], ':') === false)
{
$vars['view'] = 'article';
$vars['id'] = (int) $segments[0];
return $vars;
}*/

Ну или полностью удалите, тут уже решать Вам. Но лучше закомментировать его, чтобы с случае чего можно было вернуть все на место.

Теперь ссылки на Вашем сайте в Joomla 2.5 и Joomla 3 будут отображаться без ID материалов. Но в Joomla 3 могут появиться ошибки 404 при использовании данного способа - чтобы избежать этого, читайте примечание ниже.

Важное примечание для Joomla 3: если при переходе по ссылкам без ID у Вас возникает 404 ошибка, то найдите в файле _ваш-сайт/components/com_content/router.php строку 376 (в разных версиях Joomla эта строка может отличаться):

->where($db->quoteName('alias') . ' = ' . $db->quote($db->quote($segment)));

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

->where($db->quoteName('alias') . ' = ' . $db->quote($segment));

Теперь все ссылки должны заработать и отображаться правильно и без ошибок. Я проверил ссылки, состоящие из одного слова, цифр и нескольких слов - все открывается и работает отлично без глюков и ошибок!

Если данная статья оказалась для Вас полезна, то подписывайтесь на получение материалов любым удобным для Вас способом.

Комментарии  

#48 Roman 22.02.2016 17:57
Цитирую Валентин:
Подскажите как вернуть все обратно как было?
А то половина сайта ошибку 404 выдает.
Файлы config.xml и router.php заменил на оригинальные, но это не помогло.

Восстановление оригинальных файлов должно помочь. Так же не забудьте " Для этого Вам нужно перейти в менеджер материалов и нажать "Настройки". И в настройках теперь у Вас будет находиться строка: "Удалить ID материала в ссылке?":" Вот тут вернуть настройку!
Цитировать
#47 Валентин 20.02.2016 00:40
Подскажите как вернуть все обратно как было?
А то половина сайта ошибку 404 выдает.
Файлы config.xml и router.php заменил на оригинальные, но это не помогло.
Цитировать
#46 Леонид 06.02.2016 17:55
Здравствуйте! Такой вопрос...
Удалил материал нечайно, следовательно создал новый по быстрому и в меню разумеется указал на новый материал... Теперь ссылка на материал, то была в поисковиках 404 ((( Как вернуть в Joomle туже ссылку? Потому что там (на сайте самом) сейчас новая идёт (((
Цитировать
#45 Георгий 19.06.2015 22:43
В Джумле 2,5 также проблема с
"Так же обратите внимание, что не будут работать ссылки, если название материала состоит из одного слова."
Подскажите решение
Цитировать
#44 Павел 04.06.2015 19:21
Попробовал оба варианта: все равно ошибка 404
Цитировать
#43 Юрий 26.03.2015 13:57
404 для материалов с alias в одно слово снова актуален. В версии 3.3.6 на строке 426 уже по-умолчанию прописано
->where($db->qu oteName('alias' ) . ' = ' . $db->quote($segment));
и не работает
Цитировать
#42 Александр 10.02.2015 22:00
Цитирую Администратор:
Цитирую Egor:

Зашел в менеджер материалов.
Просмотрел все ссылки.
Не вижу в меню: "Отключить ID материала в ссылке".
На какой вкладке эта опция?

После того, как Вы зашли в менеджер материалов - нажмите кнопку "Настройки". А уже там ищите эти строки.

У меня такая же ситуация с Joomla! 3.3.6
Цитировать
#41 Mike 30.01.2015 10:18
А у меня после второго способа почему-то сайт не работает( Всё сделал так, как в инструкции. Joomla 3.3.3
Цитировать
#40 zamotin 08.12.2014 21:33
спасибо, помогло
Цитировать
#39 Алексей 25.10.2014 02:38
Цитирую Админ:
Цитирую Алексей:
Спасибо, Павел.
Ваша статья очень помогла мне.

Не за что. Очень приятно, когда оказываешься хоть кому-то полезен ))

Статья, снова помогла, восстановил сайт после обновления))) СпАсИбО!!!
Цитировать
#38 Максим 03.10.2014 13:27
Добрый день

joomla 2.5

второй способ работает
но не могу победить 404 на модулях "Последние новости" и "Список материалов категорий"
ссылки стали новые - но ведут в 404
Цитировать
#37 Александровка 08.09.2014 13:10
Все работает, спасибо..
Но почему в canonical - адрес стал относительный.
Цитировать
#36 Егерь 25.08.2014 11:54
Эти два решения гуляют по интернету, но стопроцентного решения нет. Использовал давно на joomla 2.5 второй способ, убрал много дублей разнообразных, но дубль вида site.ru/dipp/da rk и site.ru/dipp/36 -dark остаётся!
Цитировать
#35 Дим 15.08.2014 15:09
Спасибо, с 404 ошибкой справился!)
Цитировать
#34 Стас 01.08.2014 13:06
Метод работает, но приводит к задвоеным ссылкам. Лучше уж номер статьи в url, чем санкции со стороны поисковиков.
Цитировать
#33 Администратор 09.07.2014 16:03
Цитирую Egor:

Зашел в менеджер материалов.
Просмотрел все ссылки.
Не вижу в меню: "Отключить ID материала в ссылке".
На какой вкладке эта опция?

После того, как Вы зашли в менеджер материалов - нажмите кнопку "Настройки". А уже там ищите эти строки.
Цитировать
#32 Egor 05.07.2014 08:01
Возможно, я стал не совсем внимательным, но...
Сдела по вартанту 1 на Joomla 3.3.
Зашел в менеджер материалов.
Просмотрел все ссылки.
Не вижу в меню: "Отключить ID материала в ссылке".
На какой вкладке эта опция?
Цитировать
#31 Дарья 30.06.2014 10:16
Спасибо Вам)
Цитировать
#30 Администратор 28.06.2014 21:45
Цитирую Дарья:
Здравствуйте, все замечательно работает, спасибо) однако как теперь од дубляжа страниц избавится?у меня теперь страница доступна по адресу как с id материала, так и без него

Честно сказать, я не знаю. Как-то не заморачивался по этому поводу. Но сейчас ради интереса я попробовал на этом сайте вставить ID в урл и выпала 404 ошибка.

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

Посмотрите так же вот сюда http://joomline.ru/rasshirenija/plugin/jlnodubles.html
Цитировать
#29 Дарья 27.06.2014 10:40
Здравствуйте, все замечательно работает, спасибо) однако как теперь од дубляжа страниц избавится?у меня теперь страница доступна по адресу как с id материала, так и без него
Цитировать
#28 Админ 22.05.2014 00:59
Цитирую Maxim:
В Joomla 3.3 не работает. Выдает 404 ошибку при переходе на статьи. Изменял файлы по 1 способу. Не подскажите, в чем может быть проблема?

В 3.3 я ещё сам не тестировал. Попробуйте поэкспериментир овать или комбинировать несколько способов. Я чуть позже отпишу, если руки дойдут попробовать.
Цитировать
#27 Maxim 14.05.2014 17:49
В Joomla 3.3 не работает. Выдает 404 ошибку при переходе на статьи. Изменял файлы по 1 способу. Не подскажите, в чем может быть проблема?
Цитировать
#26 RusJoomladmin 27.03.2014 09:34
Сработал способ 2 на джумле 3.2.3
Огромное спасибо от RusJoomla
Цитировать
#25 Артур 11.03.2014 19:14
Все работает! Доступно и грамотно изложено. Автору респект. Спасибо!
Цитировать
#24 Администратор 06.03.2014 21:58
Цитирую Иван:
Сделал как написано в п.1 - в итоге всё работает как надо, кроме новостей - выскакивает 404 ошибка (строчку от избавления от 404-как Вы писали прописал).

Скиньте мне ссылку на сайт по контактам, указанным на этой странице http://joofaq.ru/avtor-bloga
Цитировать
#23 Администратор 05.03.2014 20:04
Цитирую Иван:
Не работает на Joomla 3.2.0, на 3.2.2.может и работает... Вообще при 2 варианте совсем ничего не происходит, кэш очистил как написано, все строчки прописал...
Что может быть?

Иван, я делал эти изменения и в 3.2.0 и с каждым новым обновлением я снова делаю эти процедуры и у меня все получается. Попробуйте сделать первым вариантом, только не забудьте потом в админке включить "Отключение ID"
Цитировать
#22 Иван 05.03.2014 18:04
Цитирую Администратор:
Цитирую Иван:
Не работает на Joomla 3.2.0, на 3.2.2.может и работает... Вообще при 2 варианте совсем ничего не происходит, кэш очистил как написано, все строчки прописал...
Что может быть?

Иван, я делал эти изменения и в 3.2.0 и с каждым новым обновлением я снова делаю эти процедуры и у меня все получается. Попробуйте сделать первым вариантом, только не забудьте потом в админке включить "Отключение ID"

Сделал как написано в п.1 - в итоге всё работает как надо, кроме новостей - выскакивает 404 ошибка (строчку от избавления от 404-как Вы писали прописал).
Цитировать
#21 Иван 05.03.2014 15:45
Не работает на Joomla 3.2.0, на 3.2.2.может и работает... Вообще при 2 варианте совсем ничего не происходит, кэш очистил как написано, все строчки прописал...
Что может быть?
Цитировать
#20 Кирилл 03.03.2014 19:34
Всё работает на последней версии Joomla 3.2.2
Спасибо! На других сайтах рекомендации были неполными. Делал по Варианту 2 учитывая "Важное примечание для Joomla 3" (без него 404 была)
Цитировать
#19 Администратор 03.03.2014 17:52
Цитирую Василий Иванович:

Поддерживаю, симптом такой же! Joomla 3.2.0.
Админ - напиши как в новой версии, не в службу, а ...
Заранее спасибо!

Ребят, Вы бы хоть написали, что именно у Вас не работает и каким способом Вы делали?

У меня на всех сайтах стоит Joomla 3.2.2 и везде работает!! Просто где-то что-то сделали не так.
Цитировать
#18 Василий Иванович 01.03.2014 20:58
Цитирую Александр:
Цитирую Алексей:
Не работает ни один способ с джумлой 3.2.

При первом способе перестает открывать материалы, тыкаешь на кнопку подробнее, а он просто обновляет уже открытую страницу.
При втором способе вообще никаких изменений не увидел)) ИД из ссылки не пропали, даже кеш очищал.
Вам стоит разобраться, проверить, и возможно пометить, что не работает для джумлы 3.2, что бы не вводить людей в заблуждение.

Аналогично не работает на Joomle 3.2.

Поддерживаю, симптом такой же! Joomla 3.2.0.
Админ - напиши как в новой версии, не в службу, а ...
Заранее спасибо!
Цитировать
#17 Александр 23.02.2014 03:10
Цитирую Алексей:
Не работает ни один способ с джумлой 3.2.

При первом способе перестает открывать материалы, тыкаешь на кнопку подробнее, а он просто обновляет уже открытую страницу.

При втором способе вообще никаких изменений не увидел)) ИД из ссылки не пропали, даже кеш очищал.

Вам стоит разобраться, проверить, и возможно пометить, что не работает для джумлы 3.2, что бы не вводить людей в заблуждение.


Аналогично не работает на Joomle 3.2.
Цитировать
#16 Администратор 31.01.2014 00:41
Цитирую Алексей:
комменты публикуются только после проверки?=\

Алексей, данный сайт, как и все мои проекты, сделан на Joomla 3.2. И везде все работает адекватно.

Поэтому Вам нужно поискать причину у себя и разобраться до конца.
Цитировать
#15 Алексей 29.01.2014 13:16
комменты публикуются только после проверки?=\
Цитировать
#14 Алексей 29.01.2014 10:15
Не работает ни один способ с джумлой 3.2.

При первом способе перестает открывать материалы, тыкаешь на кнопку подробнее, а он просто обновляет уже открытую страницу.

При втором способе вообще никаких изменений не увидел)) ИД из ссылки не пропали, даже кеш очищал.

Вам стоит разобраться, проверить, и возможно пометить, что не работает для джумлы 3.2, что бы не вводить людей в заблуждение.
Цитировать
#13 Игорь 27.01.2014 08:17
Цитирую Админ:
[quote name="Игорь"]
А откуда у Вас item в ссылках? Как я понял, у Вас стоит Zoo или аналогичный компонент?

У меня стоит К2
Цитировать
#12 Владимир 26.01.2014 08:40
Спасибо, помог второй вариант.
Во втором варианте опечатка с номером строки - первая замена на 7-ой строке, вторая на 208 (а написано 228), и третья - комментирование на 228.
Цитировать
#11 Админ 22.01.2014 02:46
Цитирую Игорь:
Спасибо автор. А есть ли вариант при котором не нужно будет привязывать материал к пунктам меню? А также интересует, как убрать слово item в пути ссылки?

А откуда у Вас item в ссылках? Как я понял, у Вас стоит Zoo или аналогичный компонент?
Цитировать
#10 Игорь 21.01.2014 10:47
Спасибо автор. А есть ли вариант при котором не нужно будет привязывать материал к пунктам меню? А также интересует, как убрать слово item в пути ссылки?
Цитировать
#9 Сан Саныч 27.12.2013 23:49
Спасибо, Первый способ не сработал (не появилась новая строка в настройках).
Второй способ помог.
Цитировать
#8 Сергей 18.12.2013 21:03
Спасибо) Работает))
Цитировать
#7 Jacobs 20.11.2013 16:13
Спасибо.
за $db->quote($seg ment)); отдельное спасибо :)
Цитировать
#6 Александр 12.11.2013 00:45
Пригодилось. Работает. Спасибо
Цитировать
#5 Админ 01.11.2013 16:30
Цитирую Сергей:
->where($db->quoteName('alias'). ' = ' . $db->quote($db->quote($segment)));

И где же в файле router.php в joomla 2.5 эта строка?

Сергей, если мне не изменяет память, на версии Joomla 2.5.14 не было глюка с однословным урлом.
Данный код актуален для версии Joomla 3
Цитировать
#4 Сергей 01.11.2013 01:02
->where($db->qu oteName('alias' ). ' = ' . $db->quote($db->quote($segment)));

И где же в файле router.php в joomla 2.5 эта строка?
Цитировать
#3 Павел 31.10.2013 11:25
Спасибо за статью. Идеальной настройкой стала фишка борьбы с ошибкой 404 в Joomla 3
$db->quote($segment));

Метод очень распространен в сети, но фишку для J3 нашел только у вас.

Еще раз спасибо. Все работает отлично.
Цитировать
#2 Админ 26.10.2013 19:16
Цитирую Алексей:
Спасибо, Павел.
Ваша статья очень помогла мне.

Не за что. Очень приятно, когда оказываешься хоть кому-то полезен ))
Цитировать
#1 Алексей 21.10.2013 01:27
Спасибо, Павел.
Ваша статья очень помогла мне.
Цитировать

Добавить комментарий


Защитный код
Обновить