- Установка сторонних sef компонентов
- Ручная правка роутера.
- Создание пунктов меню.
Для первого способа, нужно установить сам компонент sh404sef. Скачать его можно здесь:
http://anything-digi...s.html#sh404SEF Внимание! Компонент платный. И обязательно скачать и установить плагин Zoo sh404sef. Скачать плагин можно здесь: http://yoonique.net/...=57&Itemid=118. После установки плагина, нужно зайти в менеджер плагинов Joomla и включить его. Далее, в настройках компонента, настроить ссылки так как Вам нужно, учитывая один нюанс. Нужно обязательно перейти в Контрольная панель -> Конфигурация -> Компонент sh404sef -> компонент ZOO и поставить "ПРОСТАЯ КОДИРОВКА" вместо "handler". Только при наличии такой настройки будет корректно работать корзина.
Достоинства этого метода в том, что не придется править код ядра ZOO и в дальнейшем не возникнет ни каких проблем с обновлением. Недостатки этого метода в том, что в разы увеличивается нагрузка на сервер, а так же не правильная обработка GET запросов. Иногда sh404sef может "съедать" параметры.
Второй способ.
Ручная правка кода роутера ZOO. Файл роутера находится здесь: /components/com_zoo/router.php Если посмотреть на код, видно что роутер, по сути состоит из двух методов ZooBuildRoute() и ZooParseRoute() В первом создается строка запроса, во втором происходит ее разбор. Внимание! Данные правки тестировались на версии ZOO 3.0 и все правки кода Вы делаете на свой страх и риск. Стандартный sef Joomla должен быть включен. Для того что бы избавиться от параметров item и category нужно изменить всего два участка. Сначала в районе 107 строки, находим такой код:
$task = 'item'; if (@$query['task'] == $task || @$query['view'] == $task) { if (@$query['task'] == $task && @$query['item_id']) { $segments[] = $task; $segments[] = $app->alias->item->translateIDToAlias((int) $query['item_id']); } unset($query['task'], $query['view'], $query['layout'], $query['item_id']); }И заменяем его на этот:
$task = 'item'; if (@$query['task'] == $task || @$query['view'] == $task) { if (@$query['task'] == $task && @$query['item_id']) { $segments[] = $app->alias->item->translateIDToAlias((int) $query['item_id']); } unset($query['task']); unset($query['view']); unset($query['layout']); unset($query['item_id']); unset($query['category_id']); }Далее, в методе ZooParseRoute() ищем следующий код:
$task = 'item'; if ($count == 2 && $segments[0] == $task) { $vars['task'] = $task; $vars['item_id'] = (int) $app->alias->item->translateAliasToID($segments[1]); }И заменяем его на этот:
$task = 'item'; if ($count == 1 && (int) $app->alias->item->translateAliasToID($segments[0])) { $vars['task'] = $task; $vars['item_id'] = (int) $app->alias->item->translateAliasToID($segments[0]); }После этих правок, параметры category и item должны исчезнуть из ссылок.
Достоинство этого метода, по сути одно - отсутствие сторонних компонентов. Недостатков хватает. Во-первых данные изменения затрутся с ближайшим обновлением. Во-вторых, нет гарантии что все функции Zoo будут работать корректно.
Третий способ.
Заключается в том, что на каждую категорию и каждый материал, создается пункт меню. У данного способа плюсов много. Не меняется код ядра ZOO, нет сторонних расширений и т.д. Но есть один существенный недостаток. Подходит этот способ только небольшим проектам.
Полезные ссылки по теме:
Обсуждение вопроса на joomlaforum http://joomlaforum.r...&topic=180639.0
Платный плагин для ZOO http://www.raslab.or...tem/zooptimizer
Еще один альтернативный роутер http://forum.jbzoo.c...io-sef/?p=18463
Четвертый способ
Экспериментальный вариант, который удаляет из ссылок item и category бБЕЗ хака.
http://forum.jbzoo.c...tem-i-category/
Edited by SmetDenis, 15 January 2014 - 14:33.
Добавил 4й вариант