Новости Joomla

Quantum Manager нужен сообществу, а автору нужна ваша поддержка!

Quantum Manager нужен сообществу, а автору нужна ваша поддержка!Файловый менеджер Quantum — одно...

Файловый менеджер Quantum — одно из самых популярных решений для Joomla, созданное разработчиком из сообщества Joomla, Дмитрием Цымбалом (@tsymbalmitia). Он делает Quantum удобным, безопасным и современным, обновляет его, исправляет уязвимости и отвечает пользователям — всё это в свободное от основной работы время.

Теперь настал момент для следующего шага: развитие проекта требует больше времени и ресурсов.

0 Пользователей и 1 Гость просматривают эту тему.
  • 5 Ответов
  • 921 Просмотров
*

saharin88

  • Захожу иногда
  • 291
  • 20 / 1
  • JoomWork
Баг!
« : 13.12.2013, 21:29:52 »
У меня есть главная категория с несколькими уровнями вложенных категорий http://screencast.com/t/TULRWUEtk3
Таким же образом я создал структуру меню, все пункты как список категорий.
Затем у меня возникла необходимость создать пункт меню как блог основной категории, и после этого во все ссылки добавляется алиас этого пункта (reviews)
получается что то вроде этого /reviews/28-santekhnik/ustanovka-i-zamena-santekhniki.html, а должно быть 28-santekhnik/ustanovka-i-zamena-santekhniki.html

посмотрел в шаблоне списка категорий, ссылка генерируется  
JRoute::_(ContentHelperRoute::getCategoryRoute($item->id))
index.php?option=com_content&view=category&id='.$id
вроде все правильно, не могу понять почему подставляет reviews  

получается главная страница у меня как список категорий основной категории
а отзывы просто пункт меню как блог основной категории

http://screencast.com/t/5F1f0Ytx - видос

извините за безграмотность )
« Последнее редактирование: 14.12.2013, 04:15:40 от saharin88 »
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Re: БАГ JRoute
« Ответ #1 : 13.12.2013, 21:53:57 »
вроде все правильно, не могу понять почему подставляет reviews 
видимо потому что в этом ContentHelperRoute::getCategoryRoute($item->id) методе подставляется Itemid (пункт меню) родительской категории.
*

saharin88

  • Захожу иногда
  • 291
  • 20 / 1
  • JoomWork
Re: БАГ JRoute
« Ответ #2 : 13.12.2013, 22:26:28 »
видимо потому что в этом ContentHelperRoute::getCategoryRoute($item->id) методе подставляется Itemid (пункт меню) родительской категории.

так у меня есть уже созданый пункт родительской категории, причем это главная
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Re: БАГ JRoute
« Ответ #3 : 13.12.2013, 22:39:31 »
ну а если просто задать
Код
JRoute::_('index.php?option=com_content&view=category&id='.$item->id)
*

saharin88

  • Захожу иногда
  • 291
  • 20 / 1
  • JoomWork
Re: БАГ JRoute
« Ответ #4 : 13.12.2013, 22:48:09 »
ну а если просто задать
Код
JRoute::_('index.php?option=com_content&view=category&id='.$item->id)

пробовал, ошибка
ссылка получается такого вида /component/content/category/22-nashi-uslugi/santekhnik.html

вот кусок в этом классе который подставляет пункт меню

$catids 
array_reverse($category->getPath());
$needles['category'] = $catids;
$needles['categories'] = $catids;

if (
$item self::_findItem($needles))
{
    
$link .= '&Itemid='.$item;
}


это наверное нужно ковырять self::_findItem, он ищет пункт который создан как блог категории, а мне нужно view=categories
« Последнее редактирование: 13.12.2013, 22:52:15 от saharin88 »
*

saharin88

  • Захожу иногда
  • 291
  • 20 / 1
  • JoomWork
Re: БАГ JRoute
« Ответ #5 : 14.12.2013, 03:15:20 »
в чем собственно баг:

мы создаем массив $needles с ключами category и categories значения у которых полученный массив getPath() нашей категории

$needles 
= array();
$catids array_reverse($category->getPath());
$needles['category'] = $catids;
$needles['categories'] = $catids;


потом мы вызываем функцию _findItem($needles), в которой передаем наш массив, и  которая сообсвенно возвращает нам Itemid

сама функция берет все пункты меню нашего компонента и сравнивает их с отправленным нами массивом


// Prepare the reverse lookup array.
if (self::$lookup === null)
{
  
self::$lookup = array();

  
$component
	
JComponentHelper::getComponent('com_content');
  
$items
	
	
$menus->getItems('component_id'$component->id);
  foreach (
$items as $item)
  {
	
  if (isset(
$item->query) && isset($item->query['view']))
	
  {
	
	
  
$view $item->query['view'];
	
	
  if (!isset(
self::$lookup[$view])) {
	
	
	
  
self::$lookup[$view] = array();
	
	
  }
	
	
  if (isset(
$item->query['id'])) {
	
	
	
  
self::$lookup[$view][$item->query['id']] = $item->id;
	
	
  }
	
  }
  }
}

if (
$needles)
{
  foreach (
$needles as $view => $ids)
  {
	
  if (isset(
self::$lookup[$view]))
	
  {
	
	
  foreach(
$ids as $id)
	
	
  {
	
	
	
  if (isset(
self::$lookup[$view][(int)$id])) {
	
	
	
	
  return 
self::$lookup[$view][(int)$id];
	
	
	
  }
	
	
  }
	
  }
  }
}

 

$item->query['view'] сравнивается с нашими ключами

то есть проблема в том, что если у нас есть два пункта меню для одной и той же категории, только один как "блог категории" (category), а второй как список "подкатегорий" (categories)
возвращается конечно же ид пункта меню view которого category, потому что он у нас идет первым в массиве, хотя например в моем случае нужно что возвращал ид пункта view у которого categories

думаю решение можно сделать отталкиваясь от того какой у нашего пункта view, если category, значить проверять сначала parent на такой же view (кто вник, тот поймет)

« Последнее редактирование: 14.12.2013, 14:09:29 от saharin88 »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться