Новости 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

Вышел релиз Revo PageBuilder Toolkit for YOOtheme Pro 1.6

Вышел релиз Revo PageBuilder Toolkit for YOOtheme Pro 1.6.2PageBuilder Toolkit - это специализированный плагин для конструктора страниц Yootheme Pro, содержит набор различных утилит для ускорения процесса работы и отладки макета, множественные улучшения в интерфейсе, включая поддержку dark mode, подсказки, быстрая смена разрешения в окне просмотра и много чего еще.v.1.6.2 Что нового?- Индикатор статусов: теперь не просто показывает состояние запросов, но и делает автоматические попытки их отправки при кратковременных сбоях в сети, а если это не помогло, то переводит конструктор в ручной режим, что позволяет сохранит макет и настройки темы прежде чем вы потеряете все, что было сделано с момента последнего сохранения- Подсветка ошибок в макете: плагин анализирует код страницы и может автоматически подсвечивать data атрибуты с кучей мусора, которые попадают в код страницы при копипасте из Figma в TinyMCE (пригодится для старых макетов, в текущей работе плагин сам очищает код мусора). Также есть подсветка семантических ошибок сборки - дубли h1 тега на странице и вложенных друг в друга заголовков.- Улучшена поддержка будущего релиза Yootheme Pro 5 и редактора CodeMirror 6Плагин для русскоязычных пользователей доступен в каталоге расширений SovMart и распространяется за символическую плату (100р). Разработчики Joomla расширений и партнеры автора могут получить плагин бесплатно.Для работы плагина необходим конструктор страниц Yootheme Pro.Разработчик плагина - участник нашего сообщества Александр Судьбинов (@alexrevo), член официальной группы поддержки Yootheme Pro. Страница расширенияОписание на сайте автора@joomlafeed#joomla #yootheme

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

lopotorius

  • Осваиваюсь на форуме
  • 46
  • 0 / 0
В общем установлена галерея в ней есть несколько категорий:
БОЛЬШИЕ ИЗОБРАЖЕНИЯ (BIG)       алиас big
Изображения PANO                      алиас pano
Изображения SMALL                    алиас small

В поиске ввожу запрос и мне выводятся результаты(изображения) и щелкнув по изображению для перехода к детальному виду мне выбрасывает ссылку
Цитировать
http://uvcolor.ru/gallery/pano/big-11.html
вместо
Цитировать
http://uvcolor.ru/gallery/big/big-11.html
И соответственно из за этого в breadcrumbs заголовок категории фотографии PANO вместо BIG. Как и почему? :(
« Последнее редактирование: 26.05.2013, 03:56:14 от lopotorius »
*

lopotorius

  • Осваиваюсь на форуме
  • 46
  • 0 / 0
Отключил пункт меню PANO
Ссылки стали такими
Цитировать
http://uvcolor.ru/component/joomgallery/big-11.html?Itemid=149
Вообще непонятное что-то
*

lopotorius

  • Осваиваюсь на форуме
  • 46
  • 0 / 0
router.php
Код
<?php
// $HeadURL: https://joomgallery.org/svn/joomgallery/JG-2.0/JG/trunk/components/com_joomgallery/router.php $
// $Id: router.php 3839 2012-09-03 17:17:47Z chraneco $
/****************************************************************************************\
**   JoomGallery 2                                                                      **
**   By: JoomGallery::ProjectTeam                                                       **
**   Copyright (C) 2008 - 2012  JoomGallery::ProjectTeam                                **
**   Based on: JoomGallery 1.0.0 by JoomGallery::ProjectTeam                            **
**   Released under GNU GPL Public License                                              **
**   License: http://www.gnu.org/copyleft/gpl.html or have a look                       **
**   at administrator/components/com_joomgallery/LICENSE.TXT                            **
\****************************************************************************************/

defined('_JEXEC') or die('Direct Access to this location is not allowed.');

/**
 * Builds the SEF URL for all links in JoomGallery
 *
 * @param   array $query  An array containing all paramters of the original URL
 * @return  array An array of the segments which will be added to the SEF URL
 * @since   1.5.5
 */
function JoomGalleryBuildRoute(&$query)
{
  $segments = array();
  $db       = JFactory::getDBO();

  if(!defined('_JOOM_OPTION'))
  {
    require_once JPATH_ADMINISTRATOR.DS.'components'.DS.'com_joomgallery'.DS.'includes'.DS.'defines.php';
  }

  if(isset($query['view']) && $query['view'] == 'toplist')
  {
    if(isset($query['type']))
    {
      switch($query['type'])
      {
        case 'toprated':
          $segment = JFilterOutput::stringURLSafe(JText::_('COM_JOOMGALLERY_COMMON_TOPLIST_TOP_RATED'));
          if(trim(str_replace('-', '', $segment)) == '')
          {
            $segments[] = 'top-rated';
          }
          else
          {
            $segments[] = $segment;
          }
          break;
        case 'lastadded':
          $segment = JFilterOutput::stringURLSafe(JText::_('COM_JOOMGALLERY_COMMON_TOPLIST_LAST_ADDED'));
          if(trim(str_replace('-', '', $segment)) == '')
          {
            $segments[] = 'last-added';
          }
          else
          {
            $segments[] = $segment;
          }
          break;
        case 'lastcommented':
          $segment = JFilterOutput::stringURLSafe(JText::_('COM_JOOMGALLERY_COMMON_TOPLIST_LAST_COMMENTED'));
          if(trim(str_replace('-', '', $segment)) == '')
          {
            $segments[] = 'last-commented';
          }
          else
          {
            $segments[] = $segment;
          }
          break;
        default:
          $segment = JFilterOutput::stringURLSafe(JText::_('COM_JOOMGALLERY_COMMON_TOPLIST_MOST_VIEWED'));
          if(trim(str_replace('-', '', $segment)) == '')
          {
            $segments[] = 'most-viewed';
          }
          else
          {
            $segments[] = $segment;
          }
          break;
      }
    }
    else
    {
      $segment = JFilterOutput::stringURLSafe(JText::_('COM_JOOMGALLERY_COMMON_TOPLIST_MOST_VIEWED'));
      if(trim(str_replace('-', '', $segment)) == '')
      {
        $segments[] = 'most-viewed';
      }
      else
      {
        $segments[] = $segment;
      }
    }

    unset($query['type']);
    unset($query['view']);
  }

  if(isset($query['view']) && $query['view'] == 'edit')
  {
    $segments[] = 'edit';

    $dbquery = $db->getQuery(true)
            ->select('alias')
            ->from(_JOOM_TABLE_IMAGES)
            ->where('id = '.(int) $query['id']);
    $db->setQuery($dbquery);
    if(!$segment = $db->loadResult())
    {
      // Append ID of image if alias was not found?
      $segment = 'alias-not-found-'.$query['id'];
    }
    $segments[] = $segment;
    unset($query['view']);
    unset($query['id']);
  }

  if(isset($query['view']) && $query['view'] == 'editcategory')
  {
    if(isset($query['catid']))
    {
      $segments[] = 'editcategory';

      $dbquery = $db->getQuery(true)
              ->select('alias')
              ->from(_JOOM_TABLE_CATEGORIES)
              ->where('cid = '.(int) $query['catid']);
      $db->setQuery($dbquery);
      if(!$segment = $db->loadResult())
      {
        // Append ID of category if alias was not found
        $segment = 'alias-not-found-'.$query['catid'];
      }
      $segments[] = $segment;
    }
    else
    {
      $segments[] = 'newcategory';
    }
    unset($query['view']);
    unset($query['catid']);
  }

  if(isset($query['view']) && $query['view'] == 'gallery')
  {
    unset($query['view']);

    JLoader::register('JoomRouting', JPATH_ROOT.DS.'components'.DS._JOOM_OPTION.DS.'helpers'.DS.'routing.php');
    if(isset($query['Itemid']) && $Itemid = JoomRouting::checkItemid($query['Itemid']))
    {
      $query['Itemid'] = $Itemid;
    }
  }

  if(isset($query['view']) && $query['view'] == 'image')
  {
    $sef_image = 0;
    //require_once JPATH_ADMINISTRATOR.DS.'components'.DS.'com_joomgallery'.DS.'helpers'.DS.'config.php';
    //JTable::addIncludePath(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_joomgallery'.DS.'tables');
    //$config = JoomFactory::getConfig();
    //if($config->get('jg_image_sef'))
    if(!$sef_image)
    {
      $segments[] = 'image';
      return $segments;
    }

    unset($query['view']);
    $query['format'] = 'jpg';
    $segment = 'image-'.$query['id'];
    if(isset($query['type']))
    {
      $segment .= '-'.$query['type'];
      unset($query['type']);
    }
    else
    {
      $segment .= '-thumb';
    }
    if(isset($query['width']) && isset($query['height']))
    {
      $segment .= '-'.$query['width'].'-'.$query['height'];
      unset($query['width']);
      unset($query['height']);

      if(isset($query['pos']))
      {
        $segment .= '-'.$query['pos'];
      }

      if(isset($query['x']))
      {
        if(!isset($query['pos']))
        {
          $segment .= '-0';
        }

        $segment .= '-'.$query['x'];
      }

      if(isset($query['y']))
      {
        if(!isset($query['pos']))
        {
          $segment .= '-0';
        }
        else
        {
          unset($query['pos']);
        }

        if(!isset($query['x']))
        {
          $segment .= '-0';
        }
        else
        {
          unset($query['x']);
        }

        $segment .= '-'.$query['y'];

        unset($query['y']);
      }
      else
      {
        if(isset($query['pos']))
        {
          unset($query['pos']);
        }
        if(isset($query['x']))
        {
          unset($query['x']);
        }
      }
    }

    $segments[] = $segment;

    if($sef_image == 1)
    {
      unset($query['id']);

      return $segments;
    }

    //if($config->get('jg_image_sef') == 2)
    //{
      $dbquery = $db->getQuery(true)
              ->select('alias')
              ->from(_JOOM_TABLE_IMAGES)
              ->where('id = '.(int) $query['id']);
      $db->setQuery($dbquery);
      if($segment = $db->loadResult())
      {
        $segments[] = $segment;
      }
    //}

    unset($query['id']);
  }
  if(isset($query['view']) && $query['view'] == 'mini')
  {
    $segments[] = 'mini';
    unset($query['view']);
  }
  if(isset($query['view']) && $query['view'] == 'search')
  {
    $segments[] = 'search';
    unset($query['view']);
  }
  if(isset($query['view']) && $query['view'] == 'upload')
  {
    $segments[] = 'upload';
    unset($query['view']);
  }
  if(isset($query['view']) && $query['view'] == 'usercategories')
  {
    $segments[] = 'usercategories';
    unset($query['view']);
  }
  if(isset($query['view']) && $query['view'] == 'userpanel')
  {
    $segments[] = 'userpanel';
    unset($query['view']);
  }

  if(isset($query['view']) && $query['view'] == 'favourites')
  {
    $segments[] = 'favourites';

    unset($query['view']);

    if(isset($query['layout']))
    {
      if($query['layout'] == 'default')
      {
        unset($query['layout']);
      }
    }
  }

  if(isset($query['view']) and $query['view'] == 'category')
  {

 /*
    $dbquery = $db->getQuery(true)
            ->select('alias')
            ->from(_JOOM_TABLE_CATEGORIES)
            ->where('cid = '.(int) $query['catid']);
    $db->setQuery($dbquery);
    if(!$segment = $db->loadResult())
    {
      // Append ID of category if alias was not found
      $segment = 'alias-not-found-'.$query['catid'];
    }
*/


    $segments[] = $segment;
    unset($query['catid']);
    unset($query['view']);
  }

  if(isset($query['id']) && isset($query['view']) && $query['view'] == 'detail')
  {
    $dbquery = $db->getQuery(true)
            ->select('catid, alias')
            ->from(_JOOM_TABLE_IMAGES)
            ->where('id = '.(int) $query['id']);
    $db->setQuery($dbquery);
    $result_array = $db->loadAssoc();
    /*
$dbquery->clear()
            ->select('alias')
            ->from(_JOOM_TABLE_CATEGORIES)
            ->where('cid = '.$result_array['catid']);
    $db->setQuery($dbquery);
    if(!$segment = $db->loadResult())
    {
      // Append ID of category if alias was not found
      $segment = 'alias-not-found-'.$query['catid'];
    }
*/
    $segments[] = $segment;
    if(!$segment = $result_array['alias'])
    {
      // Append ID of image if alias was not found
      $segment = 'alias-not-found-'.$query['id'];
    }
    $segments[] = $segment;
    unset($query['id']);
    unset($query['view']);
  }

  if(isset($query['task']) && $query['task'] == 'savecategory')
  {
    $segments[] = 'savecategory';
    unset($query['task']);
  }

  if(isset($query['task']) && $query['task'] == 'deletecategory')
  {
    $segments[] = 'deletecategory';
    unset($query['task']);
  }

  return $segments;
}

/**
 * Analyses a SEF URL to retreive the parameters for JoomGallery
 *
 * @param   array $segments An array containing the segments of the SEF URL
 * @return  array An array of the parameters retreived
 * @since   1.5.5
 */
function JoomGalleryParseRoute($segments)
{
  require_once JPATH_ADMINISTRATOR.DS.'components'.DS.'com_joomgallery'.DS.'includes'.DS.'defines.php';
  JLoader::register('JoomRouting', JPATH_ROOT.DS.'components'.DS._JOOM_OPTION.DS.'helpers'.DS.'routing.php');

  $vars = array();

  $language = JFactory::getLanguage();
  $language->load('com_joomgallery');

  if(   $segments[0] == str_replace('-', ':', JFilterOutput::stringURLSafe(JText::_('COM_JOOMGALLERY_COMMON_TOPLIST_TOP_RATED')))
    ||  $segments[0] == str_replace('-', ':', JFilterOutput::stringURLSafe(JText::_('COM_JOOMGALLERY_COMMON_TOPLIST_LAST_ADDED')))
    ||  $segments[0] == str_replace('-', ':', JFilterOutput::stringURLSafe(JText::_('COM_JOOMGALLERY_COMMON_TOPLIST_LAST_COMMENTED')))
    ||  $segments[0] == str_replace('-', ':', JFilterOutput::stringURLSafe(JText::_('COM_JOOMGALLERY_COMMON_TOPLIST_MOST_VIEWED')))
    ||  $segments[0] == str_replace('-', ':', 'top-rated')
    ||  $segments[0] == str_replace('-', ':', 'last-added')
    ||  $segments[0] == str_replace('-', ':', 'last-commented')
    ||  $segments[0] == str_replace('-', ':', 'most-viewed')
    )
  {
    $vars['view'] = 'toplist';

    switch($segments[0])
    {
      case str_replace('-', ':', 'top-rated'):
      case str_replace('-', ':', JFilterOutput::stringURLSafe(JText::_('COM_JOOMGALLERY_COMMON_TOPLIST_TOP_RATED'))):
        $vars['type'] = 'toprated';
        break;
      case str_replace('-', ':', 'last-added'):
      case str_replace('-', ':', JFilterOutput::stringURLSafe(JText::_('COM_JOOMGALLERY_COMMON_TOPLIST_LAST_ADDED'))):
        $vars['type'] = 'lastadded';
        break;
      case str_replace('-', ':', 'last-commented'):
      case str_replace('-', ':', JFilterOutput::stringURLSafe(JText::_('COM_JOOMGALLERY_COMMON_TOPLIST_LAST_COMMENTED'))):
        $vars['type'] = 'lastcommented';
        break;
      default:
        break;
    }

    return $vars;
  }

  if($segments[0] == 'newcategory')
  {
    $vars['view'] = 'editcategory';
    return $vars;
  }

  if($segments[0] == 'editcategory')
  {
    array_shift($segments);
    if($result_array = JoomRouting::getId($segments))
    {
      $vars['catid'] = $result_array['id'];
    }
    $vars['view'] = 'editcategory';

    return $vars;
  }

  if($segments[0] == 'edit')
  {
    array_shift($segments);
    if(count($segments) && $result_array = JoomRouting::getId($segments))
    {
      $vars['id']   = $result_array['id'];
      $vars['view'] = 'edit';
    }
    else
    {
      $vars['view'] = 'upload';
    }

    return $vars;
  }

  if($segments[0] == 'savecategory')
  {
    $vars['task'] = 'savecategory';

    return $vars;
  }

  if($segments[0] == 'deletecategory')
  {
    $vars['task'] = 'deletecategory';

    return $vars;
  }

  if(strpos($segments[0], 'image') === 0)
  {
    $vars['view'] = 'image';
    $vars['format'] = 'raw';
    $exploded = explode('-', str_replace(':', '-', $segments[0]));
    if(isset($exploded[1]))
    {
      $vars['id'] = $exploded[1];
    }
    if(isset($exploded[2]))
    {
      $vars['type'] = $exploded[2];
    }
    if(isset($exploded[3]))
    {
      $vars['width'] = $exploded[3];
    }
    if(isset($exploded[4]))
    {
      $vars['height'] = $exploded[4];
    }
    if(isset($exploded[5]))
    {
      $vars['pos'] = $exploded[5];
    }
    if(isset($exploded[6]))
    {
      $vars['x'] = $exploded[6];
    }
    if(isset($exploded[7]))
    {
      $vars['y'] = $exploded[7];
    }

    return $vars;
  }

  if($result_array = JoomRouting::getId($segments))
  {
    if($result_array['view'] == 'category')
    {
      $vars['view']   = 'category';
      $vars['catid']  = $result_array['id'];
    }
    else
    {
      $vars['view']   = 'detail';
      $vars['id']  = $result_array['id'];
    }

    return $vars;
  }

  $valid_views = array( 'downloadzip',
                        'favourites',
                        'mini',
                        'search',
                        'upload',
                        'usercategories',
                        'userpanel'
                      );
  if(in_array($segments[0], $valid_views))
  {
    $vars['view'] = $segments[0];
    return $vars;
  }

  $vars['view'] = 'gallery';

  return $vars;
}
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

После редактирования названия категории - переименовывает папку с изображениями

Автор Beer

Ответов: 3
Просмотров: 2026
Последний ответ 04.04.2024, 23:00:05
от sivers
Проблема с дублем страниц в JoomGallery 3.4

Автор qvagin

Ответов: 3
Просмотров: 4085
Последний ответ 23.01.2023, 13:30:08
от e2
JoomGallery 3.6.0 если отсутствует поле Название при редактировании фотографии

Автор Beer

Ответов: 0
Просмотров: 3173
Последний ответ 09.09.2022, 20:07:49
от Beer
Название категории H1

Автор wowkarak

Ответов: 9
Просмотров: 3430
Последний ответ 09.09.2022, 20:04:00
от Beer
Не отображается описание категории, если в ней нет изображений

Автор Maffo

Ответов: 7
Просмотров: 3234
Последний ответ 20.06.2021, 14:42:03
от ShopES