Новости Joomla

Как тестировать Joomla PHP-разработчику? Компонент Patch tester.

👩‍💻 Как тестировать Joomla PHP-разработчику? Компонент Patch tester.Joomla - open source PHP-фреймворк с готовой админкой. Его основная разработка ведётся на GitHub. Для того, чтобы международному сообществу разработчиков было удобнее тестировать Pull Requests был создан компонент Patch Tester, который позволяет "накатить" на текущую установку Joomla именно те изменения, которые необходимо протестировать. На стороне инфраструктуры Joomla для каждого PR собираются готовые пакеты, в которых находится ядро + предложенные изменения. В каждом PR обычно находятся инструкции по тестированию: куда зайти, что нажать, ожидаемый результат. Тестировщики могут предположить дополнительные сценарии, исходя из своего опыта и найти баги, о которых сообщить разработчику. Или не найти, и тогда улучшение или исправление ошибки быстрее войдёт в ядро Joomla. Напомню, что для того, чтобы PR вошёл в ядро Joomla нужны минимум 2 положительных теста от 2 участников сообщества, кроме автора. Видео на YouTubeВидео на VK ВидеоВидео на RuTubeКомпонент на GitHub https://github.com/joomla-extensions/patchtester@joomlafeed#joomla #php #webdev #community

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

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 »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться