Как убрать ID (цифры) из адреса (url, урла) в joomla

Как убрать ID (цифры) из адреса (url, урла) в joomla

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

Если разобраться поплотнее, то станет ясно, что эти цифры ничто иное как ID категории и ID материала. Эстетики они не добавляют, а только наоборот, но почему так сделали разработчики. А сделали они это, чтобы исключить создание одинаковых адресов, чтобы так сказать их уникализировать урлы, что бы не дай бог будут одинаковое название статей, чтобы адрес был разный, потому как ID у них будет точно разное. Но разработчиком нужно было сделать право выбора для пользователя, чтобы он сам решал как ему поступить. Но увы. На официальном сайте Joomla, еще 18 ноября 2010 года выставлена идея внести эти изменения, можете тоже проголосовать и почитать дебаты на эту тему. Может наш с вами голос будет решающий.

Так как эта проблема не решена, то надо что то с этим делать. Есть несколько способов решения, по убиранию цифр из адреса страницы. Можно установить мощные компоненты по работе с ЧПУ (SEF) ссылками Artio JoomSEF и sh404SEF, но данные компоненты дают намного большую нагрузку на сервер и требует отдельную настройку и время на то, чтобы в них разобраться. Поэтому я не рассматриваю этот вариант. Тем более для решения такой пустяковой задачи, нецелесообразно использовать ресурсоемкие расширения. Есть небольшой плагин, который для этого предназначен, это Плагин HP Router.

 

Плагин HP Router joomla

Плагин давно разрабатывался и скорее всего не на всех версиях он запуститься. Не в коем случае не устанавливайте его на рабочую машину. Скачать с официального сайта Joomla не получилось, потому как этот плагин удалили по просьбе разработчика, остаётся лишь догадываться толи доработать решили, толи вообще передумали его размещать. Но hp router скачать получилось с немецкого сайта, версия 0,3. Но с этим плагином есть много проблем и ограничений, хоть в последний версии разработчики и исправили несколько ошибок.

  • Работает только с основными компонентами Joomla, не работает со сторонними расширениями, такими как K2 и т.п.
  • Не может быть одинаковый псевдоним (alias) для двух статей, даже если они находятся в разных категориях. Разработчик заявляет что вы не можете иметь тот же псевдоним для любого типа элемента контента.
  • Плагин добавляет еще один запрос в код, поэтому будет небольшое снижение производительности

Этот плагин работает, для Joomla 1.5.

Кто то доработал этот плагин и он работает под HP Router  joomla 1.7 и 2.5 работает. Я проверял на своем сайте, а вот насколько корректно работает и конфликтует ли с другими расширениями я не проверял. Только не забудьте включить плагин. Ссылка НP Router 1.7-2.5 скачать.

 

Удаляем числовой идентификатор с помощью хака

Мне этот вариант ближе, потому как он не требует установки каких либо сторонних расширений и не нагружает ваш сайт.

Я встречал несколько способов реализации данного метода:

 

Первый метод

. Прочитал все на том же обсуждении идеи на сайте joomla.org. Пользователь Jake VR предложил в файл находящийся ваш_сайт/administrator/components/com_content/config.xml внести следующие строки

 

<field name="sef_advanced_link" type="radio" default="1" label="SefAdvancedMode" description="Remove Item ID from Content URL?">
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>

 

Лучше его вставить вначале, как показано на рисунке, чтобы этот параметр отображался вверху страницы. 

Удаляем числовой идентификатор с помощью хака

Теперь, чтобы этот параметр увидеть, необходимо в административной панели сайта зайти в менеджер материалов и нажать на “Настройки”

Удаляем числовой идентификатор с помощью хака

У вас появиться созданный нами параметр “SefAdvancedMode”. Его можно русифицировать, а точнее написать по-русски название, только не забудте сохранить в нужном формате, а то у вас получатся иероглифы.

Если будут выходить ошибки, при добавления этого параметра, то необходимо открыть файл router.php находящийся на ваш_сайт/components/com_content/ и через CTRL+F найти строку комментариев

     // then we assume it is a category.  If they don’t we assume it is an article

И строку

     if ($count == 1) {

замените на

     if ($count == 1 && !$advanced) {

 

Jake VR пишет, что если удалить часть урла, чтобы попасть в категорию, выдаст ошибку 404, Это происходит в том случае, если эта категория создана, а в меню ее нет и ты не сможешь в нее попасть.

Также нашли ошибку у этого метода, в том что при создании названия материала одним словом выходит ошибка 404, если начинается с цифр, то выводит другое сообщение, в соответствии с цифрами выдает материал, согласно его ID.

 

Второй метод

Любезно предоставил alex-leo. Редактируем файл Router.php находящийся в ваш_сайт/components/com_content/

Нажимаем CTRL+F (запускаем поиск) и ищем

     $params->get(‘sef_advanced_link’,

должно найти 2 результата, первая примерно на 27й строке в функции function ContentBuildRoute(&$query) и вторая на 208й строке в функции function ContentParseRoute($segments). Если не находит, поищите по функциям или по номеру строк. И в найденных строках

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

меняем 0 на 1 в обоих строках.

Удаляем ID из адресной строки с помощью хака

Удаляем ID из адресной строки с помощью хака

Чуть ниже где то на 228й строке находим if (strpos($segments[0], ‘:’) === false) { (можете через поиск)

     if (strpos($segments[0], ‘:’) === false) {

          $vars[‘view’] = ‘article’;

          $vars[‘id’] = (int)$segments[0];

          return $vars;

     }

и комментируем все пять строк подряд начиная с /* и заканчивая */

Удаляем цифры из адреса с помощью хака

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

 

На вопрос как удалить числовой идентификатор из адреса сайта мы ответили с вами.

32 комментария
  1. Алексей:

    А почему у себя не убрал?

  2. ageta:

    [b]Алексей[/b] не убрал, потому что и так все устраивает. Хотя сейчас бы лучше убрал, но перестраивать урлы на сайте опасно. Часть вылететь могут из индекса и т.п.

    На некоторых своих сайтах убрал.

  3. Харлампий:

    Благодарствую, второй способ помог

    • ageta:

      [b]Харлампий[/b], рад что Вам помогло.
      Вообще все методы работают. Только в каждом методе есть свои плюсы и минусы

  4. 12stulyev:

    Спасибо, у меня сработало. Вот еще вопрос, может поможете — интернет магазин joomla 3.0 + joomshopping. Как бы убрать в ссылках на страницах товаров /component/jshopping/ ? Тогда бы все вообще хорошо было ))

  5. Тима:

    Огромное спасибо. Сколько мучался ставил sh404SEF но не чего не понял там и не нравится он. Спасибо. Помог второй метод

    • ageta:

      [b]Тима[/b], пожалуйста. Про sh404SEF есть статья, там тоже не тяжело убирается. Тяжело конечно в нем разбирается в самом начале, а потом начинаешь понимать. Это как с любым компонентом, в котором много настроек. Хотя я тоже что то не особо люблю пользоваться sh404SEF.

  6. Fatman:

    [quote]и комментируем все пять строк подряд начиная с /* и заканчивая */
    У меня работает и без комментирования. [/quote]
    Если не закомментировать эти строки, материалы и категории с alias из [b]одного слова[/b] и не привязанные к пункту меню — работать не будут — ошибка 404

  7. Сергей:

    [quote]Если не закомментироват ь эти строки, материалы и категории с alias из одного слова и не привязанные к пункту меню — работать не будут — ошибка 404[/quote]
    Да, да, обязательно нужно комментировать! Сам попал на эту ошибку, которую «посоветовал» автор! и 3 часа потратил на то чтобы разобраться, и сделать правильно!

  8. Тупилыч:

    Спасибо, второй метод работает. Переадресацию прописывать не пришлось, когда вбиваю в адресную строку старый урл с ID, автоматом перекидывает на страницу без него.

  9. юджин:

    В Joomla 3.1.1 ни один способ не помогает. Статьи все равно вываливаются в 404.

    • Abi:

      Да в Joomla 3.1.1 не работает ни один способ, временное решение залить файл router.php из Joomla 3.0.1 и ждать решения я так сделал и все работает думаю не будут работать теги но я их не использую, к тому же очевидно что в новых версиях Joomla будет все сделано так что бы из админки этот параметр включался без лазанья в код.

  10. юджин:

    [quote name=»Abi»]Да в Joomla 3.1.1 не работает ни один способ, временное решение залить файл router.php из Joomla 3.0.1 и ждать решения я так сделал и все работает думаю не будут работать теги но я их не использую, к тому же очевидно что в новых версиях Joomla будет все сделано так что бы из админки этот параметр включался без лазанья в код.[/quote]
    Да, — откатился на 3.0.3. и буду ждать тоже какое-то решение. А то включать ID назад неохота да и 3.1.1 кроме как добавлением тегов ничем не отличается больше.

  11. Алексей:

    В 2.5 работает плагин. Хорошошая вещь.

  12. Юлька:

    Прочитав комменты, стала бить ID вторым методом и все работает!!!!
    Спасибо огромное за подробные инструкции!

  13. константин:

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

  14. Abi:

    Для Joomla 3.1.1 тоже уже есть решение, после проделывания всех шагов метода 2, включая добалвение строк в xml файл
    нужно в файле: /components/com_content/router.php

    ЗАМЕНИТЬ в версии 3.1.1 (377 строка)

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

    на

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

    И все заработает как надо.

  15. Oleg Zarubin:

    Здравствуйте, вопрос немного не по теме, но связан с роутер. Если сможете помогите. В ошибках сервера регулярно появляется вот такое ri Jun 28 04:54:31 2013] [error] [client 141.8.147.17] PHP Notice: Undefined offset: 1 in /home/olegz112/data/www/rez ru/components/com_content/router.php on line 234
    [Fri Jun 28 05:33:11 2013] [error] [client 66.249.78.128] PHP Notice: Undefined index: id in /home/olegz112/data/www/rez.ru/components/com_content/router.php on line 282
    В вебмастере яндекса также висит несколько ошибок на стороне сервера или сайта. В рнр не понимаю, как исправить. Может справочник какой-то посоветуете или сам файл посмотрите.

    • ageta:

      [b]Oleg Zarubin[/b], к сожалению ничем не могу помочь. Если решите проблему отпишитесь, кому нибудь это обязательно пригодиться.

  16. Евгений:

    c русскими урл не работает способ в 3.1.1

  17. Евгений:

    Второй способ работает без комментирования. Joomla 2.5.11
    Спасибо!!!

  18. Алик:

    А у меня почему-то фпйл config.xml отсутствует. Где его можно взять?

  19. Саша:

    Спасибо помогло с редактирование router.php

  20. Alina:

    У меня Джумла 3.0.2 Последний способ выдает ошибку 404 с закоментированными 5 строками
    [quote] Если не закомментировать эти строки, материалы и категории с alias из одного слова и не привязанные к пункту меню — работать не будут — ошибка 404[/quote] как раз такие материалы и 404. Кто может помочь?

  21. Иван:

    Перепробовал все способы, чтоб убрать ID. Думал придется обращаться к Артио, что не хотелось. Но, мне повезло попасть на Ваш сайт. Помог плагин НP Router 1.7-2.5, скаченный по вашей ссылке. Спасибо. В виде благодарности заметил рекламу на Вашем сайте и не прошел мимо 😉

  22. Cloud:

    Не помогает, не первый способ, не второй.

  23. Vetal:

    а толку, если аллиас начинается с цифры — то 404 ошибка

  24. Никита:

    Здравствуйте, у меня нету ни строчек в «router» ни самого файла «config.xml» что делать? плагин ставить очень не хочу

  25. Иван:

    На Joomla 3.3.3 второй способ не работает(

  26. Андрей:

    А есть варианты решений для VirtueMart 2 как убрать id в категории?

Поделитесь своим мнением
Для оформления сообщений Вы можете использовать следующие тэги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>