Появление вопроса связано с выходом 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:
Просто скачайте и установите как любой другой плагин.
- Вы не можете иметь двух одинаковых псевдонимов (alias) для двух статей, даже если они находятся в разных категориях. Если точнее, вы не можете иметь одинаковые псевдонимы для любого типа элемента контента. Как правило, если вы можете получить список этого типа элементов контета в меню администрирования, вы не можете использовать одинаковые псевдонимы для двух элементов из этого списка.
- Плагин работает только для компонентов ядра Joomla (прим. пер.: включенных в установочный дистрибутив). Для сторонних компонентов необходимо создавать дополнительные файлы с функцией удаления ID из URL и сохранять их в папке hpRouter плагина, если существующий механизм не работает для них сразу.
- Работа плагина приводит к некоторому снижению производительности, так как с ним добавляется выполняемый код и запросы к БД. Это снижение практически не заметно, но если у вас появились проблемы после установки плагина – лучше отключите его. Если вы уже имеете проблемы с производительностью, установка плагина вам не поможет.
Известные проблемы:
– Некоторые 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.
Точно совместим со следующими:
- Com_content
- Com_contact
- Com_weblinks
- Com_newsfeed
- Com_rd_sitemap (надо проверить)
Вариант подходит для сайтов средней простоты, но с новостной лентой .
3. Использование компонента для SEF-преобразования ссылок
Данное решение ведет к созданию любых псевдонимов для любых ссылок (кроме, разумеется абсолютных дублей). В своей практике чаще всего использовал для этих целей ArtioJoomSEF.
Инструкция по установке ArtioJoomSEF и возможные проблемы и их решения описаны по ссылке.
Вариант подходит практически для любого сайта на Joomla, так как написано масса SEF-плагинов для большинства сторонних компонентов.
То что искал)
Приветствую.
Мне к сожалению не помогло , пунтк меню созданный в alphacontent 4.0.16 имеет вот такой вид:
localhost/lekarstva/katal...html?Itemid=474
Itemid=474 — ID пункта меню /katalog/ созданный в alphacontent.
artio последняя версия 3.7.5.
joomla 1.5.22
Первые 2-а метода надежно работают только со стандартными компонентами.
3-ий метод должен работать со всеми компонентами «от третих лиц» с помощью нужных расширений для JoomSEF, такое например должно быть и для alphacontent-а, причем бесплатное.
Кирилл, спасибо за ответ.
Для alphacontent-а я применил это расширение:
www.artio.net/downloads/j...xtension/details
Сегодня установил и плагин HP Router, подключил но результата нет — «itemid» не убирается.
Lavr, тут возможен вариант, что расширение для альфаконтента, умеет одружелюбливать ссылки ровно до того состояния, которое они имеют на вашем сайте, то есть, с ?itemid=XX. При этом вероятно этот итемайди он (АК) и использует в своих скриптах. Чтобы в этом точно убедиться надо глянуть скрипт расширения, но у меня пока нет на это времени (и особого настроения). HP Router, думаю в данном вопросе совсем ни при чем. Он, по-моему, умеет вырезать id-шники только из ссылок на страницы компонента com_content.
Решил оставить как есть. Не хочу напрягать Джумлу. Интересно, почему разработчикам Joomla не применить другое решение? Я так понимаю они это сделали, чтобы пути не дублировались?
Попробовал HP Router. ID из ссылок удаляется, но сами ссылки при этом перестают работать, и идет перенаправление на 404 страницу.
Artio JoomSEF уничтожил мой сайт!
не рекомендую
Давид, Artio JoomSEF просто не умеет уничтожать сайты, он вообще не трогает таблицы самой Joomla, вобщем он довольно полезен если его правильно приготовить и использовать
Подскажите. А можно отключить в урл название категории, чтобы ссылка выглядела не так: tiesto.net.ua/club-life/3...ub-life-236.html
а так: tiesto.net.ua/club-life/2...ub-life-236.html
в настройках меню стоит показывать блог раздела!!!
Заранее благодарен!!
Да, можно с помощью Artio JoomSEF.
А без сторонних плагинов это можно сделать, настройками джумлы???
В Joomla 1.5 точно нет, в Joomla 1.6-1.7 не смотрел.
Сделал небольшой хак для router — который убирает ID из статей joomla 2.5,1.7,1.6, и исправляет баг если статья в одно слово(не работает ЧПУ), кому интересно вот тут все написано. alex-leo.ru/joomla/116-yb...iz-statei-joomla
Добавляем кнопку «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 !
Слава, спасибо за информативный коммент, по теме.