Новости 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 Гость просматривают эту тему.
  • 9 Ответов
  • 2540 Просмотров
*

rubasket

  • Захожу иногда
  • 346
  • 13 / 1
  • RuBasket.com
Кэширование вручную
« : 30.01.2010, 16:47:44 »
Как можно кэшировать запрос к базе,чтобы не выполнять его в другой раз...например в модуле... я добавил в него (в xml) функцию кэша,но в отладке некоторые запросы не кешируются... пример из отладки

Цитировать
/modules/mod_news_pro_gk1/gk_classes/joomla.news.class.php:482
/modules/mod_news_pro_gk1/helper.php:295
Execute time:8.0E-5 sec.
SELECT
                                s.`filename` AS filename,
                                s.`article` AS artID       
                       
  FROM
                                jos_gk3_photoslide_slides AS s
                       
  LEFT JOIN
                                jos_gk3_photoslide_groups AS g
                               
  ON
                                s.group_id = g.id
                       
  WHERE
                                s.access <= 0
                               
  AND
                                s.published = 1
                               
  AND
                                g.type = "News Show Pro"
что надо добавить в код этого php файла ,чтобы он начал кэшировать запросы?
Только я знаю,что могу (C) Джон Локк 
Why him ?Mmm? What  about me? БЕНЖАМИН Л
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
*

rubasket

  • Захожу иногда
  • 346
  • 13 / 1
  • RuBasket.com
Re: Кэширование вручную
« Ответ #2 : 30.01.2010, 17:20:59 »
попровал выполнить то ,что написано в статье в примере  (кстати оригинал http://docs.joomla.org/Using_caching_to_speed_up_your_code)
,но что-то с классом не так....
- Fatal error: Class 'JProfiler' not found in /home/users/r/rubasket/domains/rubasket.org.ru/components/com_testcache/testcache.php on line 27
что это может быть?
Только я знаю,что могу (C) Джон Локк 
Why him ?Mmm? What  about me? БЕНЖАМИН Л
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Re: Кэширование вручную
« Ответ #3 : 30.01.2010, 17:28:32 »
попровал выполнить то ,что написано в статье в примере  (кстати оригинал http://docs.joomla.org/Using_caching_to_speed_up_your_code)
,но что-то с классом не так....
- Fatal error: Class 'JProfiler' not found in /home/users/r/rubasket/domains/rubasket.org.ru/components/com_testcache/testcache.php on line 27
что это может быть?
я не знаю конечно как и чего ты там делал, но там написано все правильно. И ссылка на источник к тоже есть.
класс объявил?
Код
$profiler = new JProfiler();
*

rubasket

  • Захожу иногда
  • 346
  • 13 / 1
  • RuBasket.com
Re: Кэширование вручную
« Ответ #4 : 30.01.2010, 17:33:29 »
Цитировать
<?php
 
class TestClass {
 
    function testMethod( $table ) {
 
        // Get a reference to the global database object.
        $db = & JFactory::getDBO();
 
        // Execute the same database query 250 times.
        for( $i=0; $i<250; $i++) {
            $db->setQuery( "SELECT * FROM #__$table" );
            $rows = $db->loadObjectList();
        }
 
        return $rows;
    }
}
 
// Determine which database table to query.
$table = JRequest::getVar( 'table', 'content' );
 
// Get a reference to the global cache object.
$cache = & JFactory::getCache();
 
// Run the test without caching.
$profiler = new JProfiler();
$rows = TestClass::testMethod( $table );
echo $profiler->mark( ' without caching' );
 
// Run the test with caching.
$profiler = new JProfiler();
$rows  = $cache->call( array( 'TestClass', 'testMethod' ), $table );
echo $profiler->mark( ' with caching' );
 
?>
всё  я прописал...
или чего-то не хватает?
Только я знаю,что могу (C) Джон Локк 
Why him ?Mmm? What  about me? БЕНЖАМИН Л
*

rubasket

  • Захожу иногда
  • 346
  • 13 / 1
  • RuBasket.com
Re: Кэширование вручную
« Ответ #5 : 30.01.2010, 17:51:01 »
УВ. Smokerman ,а в строке
Цитировать
$rows  = $cache->call( array( 'TestClass', 'testMethod' ), $table );
что будет вместо $rows и $table  для кода
Цитировать
$query_news = '
         SELECT DISTINCT
            cats.title AS cat,
            '.((($config['username'] != 2)? 'users.'.(($config['username'] == 1)? 'username':'name') : 'content.created_by_alias')).' AS author,
            cats.section AS SID,
            content.title AS title,
            content.introtext AS text,
            content.created AS date,
            content.publish_up AS date_publish,
             content.images AS images,
            content.id as IID,
            CASE WHEN CHAR_LENGTH(content.alias)
               THEN CONCAT_WS(":", content.id, content.alias)
                  ELSE content.id END as ID,
            CASE WHEN CHAR_LENGTH(cats.alias)
               THEN CONCAT_WS(":", cats.id, cats.alias)
                  ELSE cats.id END as CID                
         FROM
            #__content AS content
            LEFT JOIN
               #__categories AS categories
               ON categories.id = content.catid
            
            LEFT JOIN
               #__sections AS sections
               ON sections.id = content.sectionid
            LEFT JOIN
               #__menu AS menu
               ON menu.componentid = content.id
            LEFT JOIN
               #__users AS users
               ON users.id = content.created_by
            LEFT JOIN
               #__content_frontpage AS frontpage
               ON content.id = frontpage.content_id           
            LEFT JOIN
               #__categories AS cats
               ON content.catid = cats.id    
         WHERE
            content.state = 1'.((!$noauth && $config['unauthorized'] == 0)? '
               AND categories.access <= ' .(int) $aid . '
               AND content.access <= '.(int) $aid : '').'
                AND categories.published = 1 
            AND ( content.publish_up = '.$db->Quote($nullDate).'
               OR content.publish_up <= '.$db->Quote($now).' )
               AND ( content.publish_down = '.$db->Quote($nullDate).'
               OR content.publish_down >= '.$db->Quote($now).' )
            AND ( '.$sql_where.' )
            '.$frontpage_con.'
         ORDER BY
            '.$order_options.'
         LIMIT
            '.$config['startposition'].','.($amount + (int)$config['startposition']).';
?
Только я знаю,что могу (C) Джон Локк 
Why him ?Mmm? What  about me? БЕНЖАМИН Л
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Re: Кэширование вручную
« Ответ #6 : 30.01.2010, 18:01:01 »
да я откуда знаю :) ты привел вообще sql запрос, который ничего не говорит.
*

rubasket

  • Захожу иногда
  • 346
  • 13 / 1
  • RuBasket.com
Re: Кэширование вручную
« Ответ #7 : 30.01.2010, 18:16:51 »
извини пожалуйста,просто я не дошёл ещё до функций в PHP );
а ,вот нашёл всю функцию ,входящую в класс class GK_JoomlaNewsNP11...но вот как тут что-то сделать..аж глаза разбегаются...

Цитировать
function getNewsStandardMode($categories, $sql_where, $config, $amount)
   {   
      // mainframe
      global $mainframe;
      // Arrays for content
      $content_id = array();
      $content_iid = array();
      $content_cid = array();
      $content_title = array();
      $content_text = array();
      $content_images = array();
      $content_date = array();
      $content_author = array();
      $content_catname = array();
      $content_sid = array();
      $news_amount = 0;
      // Initializing standard Joomla classes and SQL necessary variables
      $db =& JFactory::getDBO();
      $user =& JFactory::getUser();
      $aid = $user->get('aid', 0);
      $contentConfig = &JComponentHelper::getParams( 'com_content' );
      $noauth   = $contentConfig->get('show_noauth');
      $date =& JFactory::getDate();
      $now  = $date->toMySQL();
      $nullDate = $db->getNullDate();
      // Overwrite SQL query when user set IDs manually
      if($config['IDs'] != '')
      {
         // initializing variables
         $sql_where = '';
         $ids = explode(',', $config['IDs']);
         //
         for($i = 0; $i < count($ids); $i++ )
         {   
            // linking string with content IDs
            $sql_where .= ($i != 0)? ' OR content.id = '.$ids[$i] : ' content.id = '.$ids[$i];
         }
      }
      // if some data are available
      if(count($categories) > 0)
      {
         // when showing only frontpage articles is disabled
         if($config['only_frontpage'] == 0)
         {
            $frontpage_con = ($config['news_frontpage'] == 0)? ' AND frontpage.content_id IS NULL ' : '';
         }
         else // when showing only frontpage articles is enabled
         {
            $frontpage_con = ' AND frontpage.content_id IS NOT NULL ';
         }
         // Ordering string
         $order_options = '';
         // When sort value is random
         if($config['news_sort_value'] == 'random')
         {
            $order_options = ' RAND() ';
         }
         else // when sort value is different than random
         {
            if($config['news_sort_value'] != 'fordering') $order_options = ' content.'.$config['news_sort_value'].' '.$config['news_sort_order'].' ';
            else $order_options = ' frontpage.ordering '.$config['news_sort_order'].' ';
         }
         // creating SQL query

         $query_news = '
         SELECT DISTINCT
            cats.title AS cat,
            '.((($config['username'] != 2)? 'users.'.(($config['username'] == 1)? 'username':'name') : 'content.created_by_alias')).' AS author,
            cats.section AS SID,
            content.title AS title,
            content.introtext AS text,
            content.created AS date,
            content.publish_up AS date_publish,
             content.images AS images,
            content.id as IID,
            CASE WHEN CHAR_LENGTH(content.alias)
               THEN CONCAT_WS(":", content.id, content.alias)
                  ELSE content.id END as ID,
            CASE WHEN CHAR_LENGTH(cats.alias)
               THEN CONCAT_WS(":", cats.id, cats.alias)
                  ELSE cats.id END as CID                
         FROM
            #__content AS content
            LEFT JOIN
               #__categories AS categories
               ON categories.id = content.catid
            
            LEFT JOIN
               #__sections AS sections
               ON sections.id = content.sectionid
            LEFT JOIN
               #__menu AS menu
               ON menu.componentid = content.id
            LEFT JOIN
               #__users AS users
               ON users.id = content.created_by
            LEFT JOIN
               #__content_frontpage AS frontpage
               ON content.id = frontpage.content_id           
            LEFT JOIN
               #__categories AS cats
               ON content.catid = cats.id    
         WHERE
            content.state = 1'.((!$noauth && $config['unauthorized'] == 0)? '
               AND categories.access <= ' .(int) $aid . '
               AND content.access <= '.(int) $aid : '').'
                AND categories.published = 1 
            AND ( content.publish_up = '.$db->Quote($nullDate).'
               OR content.publish_up <= '.$db->Quote($now).' )
               AND ( content.publish_down = '.$db->Quote($nullDate).'
               OR content.publish_down >= '.$db->Quote($now).' )
            AND ( '.$sql_where.' )
            '.$frontpage_con.'
         ORDER BY
            '.$order_options.'
         LIMIT
            '.$config['startposition'].','.($amount + (int)$config['startposition']).';
         ';


 



         // run SQL query
         $db->setQuery($query_news);
         // when exist some results
         if($news = $db->loadObjectList())
         {
            // generating tables of news data
            foreach($news as $item)
            {
               $content_id[] = $item->ID; // news IDs
               $content_iid[] = $item->IID; // news IDs
               $content_cid[] = $item->CID; // news CIDs
               $content_title[] = $item->title; // news titles
               $content_text[] = $item->text; // news text
               $content_images[] = $item->images; // news images   
               $content_date[] = $item->date; // news dates
               $content_date_publish[] = $item->date_publish; // news dates
               $content_author[] = $item->author; // news author
               $content_catname[] = $item->cat; // news category name
               $content_sid[] = $item->SID; // news category section ID
               $news_amount++;   // news amount
            }
         }
      }
      //
      // Returning data in hash table
      //
      return array(
         "ID" => $content_id,
         "IID" => $content_iid,
         "CID" => $content_cid,
         "title" => $content_title,
         "text" => $content_text,
         "images" => $content_images,
         "date" => $content_date,
         "date_publish" => $content_date_publish,
         "author" => $content_author,
         "catname" => $content_catname,
         "SID" => $content_sid,
         "news_amount" => $news_amount
      );
   }
Только я знаю,что могу (C) Джон Локк 
Why him ?Mmm? What  about me? БЕНЖАМИН Л
*

rubasket

  • Захожу иногда
  • 346
  • 13 / 1
  • RuBasket.com
Re: Кэширование вручную
« Ответ #8 : 30.01.2010, 18:38:59 »
или  готов заплатить человеку 500р ,чтобы он сделал за меня
ася 5925920
Только я знаю,что могу (C) Джон Локк 
Why him ?Mmm? What  about me? БЕНЖАМИН Л
*

rubasket

  • Захожу иногда
  • 346
  • 13 / 1
  • RuBasket.com
Re: Кэширование вручную
« Ответ #9 : 30.01.2010, 20:41:32 »
$db =& JFactory::getDBO();
  // getting instance of GK_JoomlaNews
  $newsClass = new GK_JoomlaNewsNP11();
  // Getting list of categories
  $categories = $newsClass->getSources($this->config, 0);
вот как было
$categories - эта переменная равна
$newsClass->getSources($this->config, 0);


тут понятно как все это обращаеться
а вот как стало
по инструкции
$db =& JFactory::getDBO();
  // getting instance of GK_JoomlaNews
  $cache = & JFactory::getCache();
  $cache->setCaching(1);
  $newsClass=$cache->call(array('GK_JoomlaNewsNP11','getSources'));
  // Getting list of categories
  $categories = $newsClass->getSources($this->config, 0);
а по-другому-то как?
Только я знаю,что могу (C) Джон Локк 
Why him ?Mmm? What  about me? БЕНЖАМИН Л
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Кэширование Joomla. Посоветуйте

Автор Shelby

Ответов: 15
Просмотров: 4376
Последний ответ 01.04.2015, 05:13:17
от 04r12
Нужно ли включать кэширование?

Автор MaJIb4iK

Ответов: 11
Просмотров: 5366
Последний ответ 09.12.2014, 10:41:00
от Kaktus_0,7
Кэширование и GZIP-сжатие страниц?

Автор 7Azimuth

Ответов: 7
Просмотров: 8199
Последний ответ 22.02.2014, 11:00:56
от Vavil[ON]
rel="shadowbox" пишу вручную, автоматизация

Автор Hufflepuff

Ответов: 1
Просмотров: 1673
Последний ответ 28.01.2014, 12:57:41
от flyingspook
Странное кэширование алиасов ссылки. Проблема

Автор romashkin

Ответов: 2
Просмотров: 1745
Последний ответ 25.06.2012, 01:08:11
от romashkin