В продолжение этой темы - http://forum.jbzoo.c...vleniya-ssylok/
Недавно, создавая новый оф сайт http://jbzoo.com я попробовал разобраться в принципе работы роутера Zoo.
У меня получилось выкинуть из ссылок item и category.
Сразу скажу - не уверен что способ 100% рабочий, но тем не менее для небольших сайтов он вполне сгодится.
Для нового jbzoo.com он вполне рабочий.
Основные достоинства на данный момент
- Никаких хаков
- Используется стандартный SEF
- Не должно быть дополнительной нагрузки на сервер.
- Никак не может изменить базу данных (понятия не имею откуда взялся миф что правки роутера ломамют контент).
Недостатки
- Слабо тестировал. По факту всего на 2х сайтах.
- На свой страх и риск =)
Что нужно сделать ?
Открываем файл \media\zoo\applications\jbuniversal\framework\events\jbevent.application.php
И меняем одноименные функции sefBuildRoute и sefParseRoute на вариант ниже
<?php /** * on after application sefparseroute * @param AppEvent $event */ public static function sefParseRoute($event) { $app = self::app(); $params = $event->getParameters(); $count = count($params['segments']); if (empty($params['vars'])) { $itemId = (int)$app->alias->item->translateAliasToID($params['segments'][0]); if ($itemId) { $params['vars']['task'] = 'item'; $params['vars']['item_id'] = $itemId; } } if (empty($params['vars'])) { $categoryId = (int)$app->alias->category->translateAliasToID($params['segments'][0]); if ($categoryId) { $params['vars']['task'] = 'category'; $params['vars']['category_id'] = $categoryId; if (isset($params['segments'][1])) { $params['vars']['page'] = (int)$params['segments'][1]; } } } $event->setReturnValue($params); } /** * on after application sefbuildroute * @param AppEvent $event */ public static function sefBuildRoute($event) { $app = self::app(); $params = $event->getParameters(); if (isset($params['segments'][0])) { if (in_array($params['segments'][0], array('item', 'category', 'frontpage'))) { unset($params['segments'][0]); } } $params['segments'] = array_values($params['segments']); $event->setReturnValue($params); }
Они есть только в последних версиях JBZoo + Zoo
Если у вас не оказалось этого файла или функций, то скорее всего у вас для данного метода устарела версия либо Zoo, либо JBZoo.
Испытывал на
Joomla: 3.2.1, JBZoo: 2.1.2 Pro, Zoo: 3.1.4 без какого либо постороннего SEF
Я буду только рад, если кто-нибудь протестирует и напишет мне ошибки/отзыв
Т.к ближе к JBZoo v2.3.0 мы планируем написать свой роутер Zoo (со своим блекджеком и плюшками, опять же без хаков итд... итп...)
Ваш отзыв - был бы хорошим толчком разработчиков в нужном направлении.
PS Создал отдельный топик, а не сообщение в существующей теме, в надежде собрать ошибки/отзывы
UPD #1 Внес правку для удаления слова "frontpage"
UPD #2 Прикрепил пример файла /media/zoo/applications/jbuniversal/framework/events/jbevent.application.php
Attached Files
Edited by SmetDenis, 23 January 2014 - 20:14.
Прикрепил файл