Как убрать id категории и материала в ссылках Joomla?

artio joomsef logoПоявление вопроса связано с выходом Joomla 1.5 и его новым, встроенным механизмом SEF-url. Речь идет о желании без последствий избавиться от цифр в начале некоторых блоков URL, которые представляют из себя id категорий и материалов, которые Joomla использует в целях однозначного определения материала для отображения. Далее примеры и варианты решения.

1. Использовать только ссылки присутствующие в меню

При создании ссылки на материал (статический или категоризированный) joomla записывает соответствие внутренней ссылки и псевдонима ссылки в таблицу #__menu (jos_menu). Соответственно при использовании ссылки с псевдонимом в любом месте сайта вы будете также перенаправляться на нужный материал как и при переходе из пункта меню.
Такой подход применим для небольших, редко-обновляемых сайтов, ссылки из модуля последних новостей будут содержать id категории и раздела при включенном стандартном SEF, записывать ссылку на каждую новость в меню достаточно трудоемко и не оправданно.

2. Удаление id категории и материала из ссылок плагином HP Router

Плагин является единственным в своем роде (по моим поискам), поэтому рассмотрим его несколько внимательнее.
Пример работы плагина HP Router на демо-установке Joomla:
Пример удаления id матриала:
http://test.site/the-news/1-welcome-to-joomla ->

http://test.site/the-news/welcome-to-joomla

Пример удаления id категории и id матриала в модуле последних новостей:
http://test.site/component/content/article/3-newsflash/41-newsflash-5 ->

http://test.site/component/content/article/newsflash/newsflash-5

Официальное описание плагина:
HP Router берет URL из ядра Joomla и удаляет из них ID, исключая ссылки в модулях меню. Теперь вы можете создавать URL без номеров в них и это даже может помочь с дублированием контента в некоторых ситуациях (прим. пер.: мне пока такие не встречались). Так же он реализует некоторые улучшения в URL.

Установка плагина HP Router:
Просто скачайте и установите как любой другой плагин.

ВНИМАНИЕ!! Есть несколько вещей о которых вы должны знать об этом плагине:
  1. Вы не можете иметь двух одинаковых псевдонимов (alias) для двух статей, даже если они находятся в разных категориях. Если точнее, вы не можете иметь одинаковые псевдонимы для любого типа элемента контента. Как правило, если вы можете получить список этого типа элементов контета в меню администрирования, вы не можете использовать одинаковые псевдонимы для двух элементов из этого списка.
  2. Плагин работает только для компонентов ядра Joomla (прим. пер.: включенных в установочный дистрибутив). Для сторонних компонентов необходимо создавать дополнительные файлы с функцией удаления ID из URL и сохранять их в папке hpRouter плагина, если существующий механизм не работает для них сразу.
  3. Работа плагина приводит к некоторому снижению производительности, так как с ним добавляется выполняемый код и запросы к БД. Это снижение практически не заметно, но если у вас появились проблемы после установки плагина – лучше отключите его. Если вы уже имеете проблемы с производительностью, установка плагина вам не поможет.

Известные проблемы:
– Некоторые URL не могут быть приведены в SEF-вид. Это не проблема HP Router, а ошибка в самой Joomla.
Эти URL на служебных иконках статьи (прим. пер.: возможно имеются ввиду иконки печати, pdf и e-mail) и URL в модуле rss-экспорта новостей.
Эти ошибки должны быть исправлены в Joomla! 1.5.8 (прим. пер.: плагин 2008 года)
– Псевдонимы начинающиеся с цифр могут вызвать проблемы и скорее всего работать не будут.

Как избежать дублирования контента с этим плагином?
Множество людей создают пункты меню для просмотра содержимого раздела и затем создают домолнительный пункт меню для просмотра категории внутри этого раздела. Они часто называют пункт меню и категорию одинаково. Ранее через ID в URL, URL просмотра содержимого категории раздела отличался от ссылки в меню. С этим плагином когда два псевдонима одинаковы (один в меню и другой в ссылке на категорию), Joomla сгенерирует одинаковые URL для просмотра раздела и в меню. Тем не менее, необходимо отметить, что ссылка пункта меню всегда будет иметь преимущественную силу по сравнению с ссылкой на категорию (прим. пер.: правда пока непонятно в чем это выражается).

Таким образом если вы имеете различный набор модулей назначенных на пункт меню категории и вы кликните на ссылку внутри раздела, вы увидите назначенные пункту меню категории модули.

Примечение: пока что понять этот перевод немногоим легче чем оригинал на странице плагина, но, возможно, по мере использования плагина я его уточню. (Или уточните вы в комментариях).

Как известно ссылки в меню уже не содержат id (содержат только псевдоним пункта меню, который по соответствию в таблице jos_menu, ведет на нужный URL), поэтому плагин будет обрабатывать ссылки на материалы не записанные в каких либо меню (например ссылки из модулей «Последние новости», «Популярные материалы»).

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

  1. Com_content
  2. Com_contact
  3. Com_weblinks
  4. Com_newsfeed
  5. Com_rd_sitemap (надо проверить)

Вариант подходит для сайтов средней простоты, но с новостной лентой :) .

3. Использование компонента для SEF-преобразования ссылок

Данное решение ведет к созданию любых псевдонимов для любых ссылок (кроме, разумеется абсолютных дублей). В своей практике чаще всего использовал для этих целей ArtioJoomSEF.
Инструкция по установке ArtioJoomSEF и возможные проблемы и их решения описаны по ссылке.
Вариант подходит практически для любого сайта на Joomla, так как написано масса SEF-плагинов для большинства сторонних компонентов.

Комментариев: 18

  • 10.11.2010 Андрей:

    То что искал)

  • 29.11.2010 Lavr:

    Приветствую.

    Мне к сожалению не помогло , пунтк меню созданный в alphacontent 4.0.16 имеет вот такой вид:

    localhost/lekarstva/katal...html?Itemid=474

    Itemid=474 — ID пункта меню /katalog/ созданный в alphacontent.

    artio последняя версия 3.7.5.

    joomla 1.5.22

    • 29.11.2010 Кирилл:

      Первые 2-а метода надежно работают только со стандартными компонентами.

      3-ий метод должен работать со всеми компонентами «от третих лиц» с помощью нужных расширений для JoomSEF, такое например должно быть и для alphacontent-а, причем бесплатное.

  • 29.11.2010 Lavr:

    Кирилл, спасибо за ответ.

    Для alphacontent-а я применил это расширение:

    www.artio.net/downloads/j...xtension/details

    Сегодня установил и плагин HP Router, подключил но результата нет — «itemid» не убирается.

    • 29.11.2010 Кирилл:

      Lavr, тут возможен вариант, что расширение для альфаконтента, умеет одружелюбливать ссылки ровно до того состояния, которое они имеют на вашем сайте, то есть, с ?itemid=XX. При этом вероятно этот итемайди он (АК) и использует в своих скриптах. Чтобы в этом точно убедиться надо глянуть скрипт расширения, но у меня пока нет на это времени (и особого настроения). HP Router, думаю в данном вопросе совсем ни при чем. Он, по-моему, умеет вырезать id-шники только из ссылок на страницы компонента com_content.

  • 08.01.2011 jommP:

    Решил оставить как есть. Не хочу напрягать Джумлу. Интересно, почему разработчикам Joomla не применить другое решение? Я так понимаю они это сделали, чтобы пути не дублировались?

  • 11.04.2011 Андрей:

    Попробовал HP Router. ID из ссылок удаляется, но сами ссылки при этом перестают работать, и идет перенаправление на 404 страницу.

  • 25.05.2011 David:

    Artio JoomSEF уничтожил мой сайт!

    не рекомендую

  • 13.10.2011 Dj Tiesto:

    Подскажите. А можно отключить в урл название категории, чтобы ссылка выглядела не так: tiesto.net.ua/club-life/3...ub-life-236.html

    а так: tiesto.net.ua/club-life/2...ub-life-236.html

    в настройках меню стоит показывать блог раздела!!!

    Заранее благодарен!!

  • 14.10.2011 Dj Tiesto:

    А без сторонних плагинов это можно сделать, настройками джумлы???

  • 25.02.2012 Alex Leo:

    Сделал небольшой хак для router — который убирает ID из статей joomla 2.5,1.7,1.6, и исправляет баг если статья в одно слово(не работает ЧПУ), кому интересно вот тут все написано. alex-leo.ru/joomla/116-yb...iz-statei-joomla

  • 15.03.2012 Слава:

    Добавляем кнопку «Sef Advanced Mode» в «Настройки» менеджера материалов joomlaforum.ru/index.php?topic=169326.30

    Исправляем баг если статья в одно слово

    корень_сайта/components/com_content/router.php

    заменить код:

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

    2.if ($count == 1) {

    на код:

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

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

    Наслаждаемся новой Joomla 2.5 !


Добавление комментария:

 css.php