В продолжение этой темы - 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
Прикрепленные файлы
Сообщение отредактировал SmetDenis: 23 January 2014 - 20:14
Прикрепил файл













