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

konstantinopol

  • Захожу иногда
  • 66
  • 2 / 0
 
 Я взял модуль mostRead и решил переписать его таким образом чтобы он высвечивал 10 топ по оценке пользователей(оценка производится с помощью плагина StarVote)

 mostRead собирает 10 самых читаемых из phpMyAdmin и пишел это всё в array который потом высвечивается, я же хочу вписать в array то что мне нужно и высветить сеё!

 У меня всё есть, единственная проблема я немогу вытащить нужную мне информацию из phpMyAdmin. Запрос работает без проблем и выдаёт те 10 которые нужно передать но как эту инфу записать в array


Код
           $query = 'SELECT a.title' .
                        ' FROM #__redim_starvote AS a' .
                        ' INNER JOIN #__content AS f ON a.id = f.id' .
                        ' ORDER BY (a.total_value/a.total_votes) DESC'.
                        ' LIMIT 10';

            $db->setQuery($query);
            $rows=$db->loadObjectList();


             $i;
             $lists        = array();

             foreach($rows as $row){
                 $lists[$i]->link = htmlspecialchars($row->title)
                 $i++;
             }



                return $lists;

Зарание благодарен! ^-^
*

SDKiller

  • Живу я здесь
  • 2705
  • 329 / 5
  • ...ergo sum
А у Вас структура массива $lists какая?

Если одномерный - то просто $lists[$i], а если многомерный ассоциативный, то $lists[$i]['link']
*

Lex

  • Завсегдатай
  • 1615
  • 274 / 1
Если уверен что $rows не пустая то как-то так
foreach($rows as $row){
                 $lists[] = htmlspecialchars($row->title,ENT_QUOTES,'utf-8');              
             }
или так
foreach($rows as $key => $row){
                 $lists[$key] = htmlspecialchars($row->title,ENT_QUOTES,'utf-8');              
             }
Жизнь заставила учиться.
В личке на вопросы не отвечаю.
*

konstantinopol

  • Захожу иногда
  • 66
  • 2 / 0

Идиотизм заключается в том что когда я ввожу данный запрос только в phpMyAdmin всё красиво выводится, а когда пускаю это всё через
$db->setQuery($query);
$rows=$db->loadObjectList();


и пытаюсь вписать это всё а array ничего не получается. Return получает пустой array...
Сделал вывод результата на экран, точно пустой...  :(

Фигня какае то...
*

konstantinopol

  • Захожу иногда
  • 66
  • 2 / 0
А у Вас структура массива $lists какая?

Если одномерный - то просто $lists[$i], а если многомерный ассоциативный, то $lists[$i]['link']

Обычный одномерны array со структурой lists[$i]
*

SDKiller

  • Живу я здесь
  • 2705
  • 329 / 5
  • ...ergo sum
А у Вас title в какой таблице

Просто судя по запросу Вы его выбираете из #__redim_starvote

Цитировать
'SELECT a.title' .
                        ' FROM #__redim_starvote AS a'

Но тогда вообще не видно смысла в объединении запроса с
Цитировать
#__content AS f
*

konstantinopol

  • Захожу иногда
  • 66
  • 2 / 0
А у Вас title в какой таблице

Просто судя по запросу Вы его выбираете из #__redim_starvote

Но тогда вообще не видно смысла в объединении запроса с


Пардон там действительно должно стоять f.title, но разницы никакой нет. В каждой таблице имеется title и в любом случае выводятся значения.
*

SDKiller

  • Живу я здесь
  • 2705
  • 329 / 5
  • ...ergo sum
Обычный одномерны array

->link уберите.

Цитировать
В каждой таблице имеется title и в любом случае выводятся значения

Тогда смысл грузить сервер объединённым запросом, если всё можно получить из одной таблицы?
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
konstantinopol проверьте, список вообще инициализируется? Сделайте дамп переменной $rows
Код
var_dump($rows);
Ну и проверьте, есть ли требуемые значения. Если все ок, то дальше будет искать, что не так. Но кажется, все правильно делаете, только $i у Вас почему-то неиницализирована. Сделайте её $i = 0;
*

konstantinopol

  • Захожу иногда
  • 66
  • 2 / 0
->link уберите.

Тогда смысл грузить сервер объединённым запросом, если всё можно получить из одной таблицы?

Вот вывод:
Код
Array
(
    [0] =>
    [1] =>
    [2] =>
    [3] =>
    [4] =>
    [5] =>
    [6] =>
    [7] =>
    [8] =>
    [9] =>
)

Потому что title в этих таблица разные, поэтому и приходится запрос обьединять.
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Re: достать топ лист из phpMyAdmin(loadObjectList())
« Ответ #10 : 28.12.2010, 15:48:33 »
Вот вывод:
Код
Array
(
    [0] =>
    [1] =>
    [2] =>
    [3] =>
    [4] =>
    [5] =>
    [6] =>
    [7] =>
    [8] =>
    [9] =>
)
Это точно вывод $rows? Просто в $rows должны быть объекты, но их нет. Значит косяк в запросе.
*

konstantinopol

  • Захожу иногда
  • 66
  • 2 / 0
Re: достать топ лист из phpMyAdmin(loadObjectList())
« Ответ #11 : 28.12.2010, 15:52:06 »
Это точно вывод $rows? Просто в $rows должны быть объекты, но их нет. Значит косяк в запросе.

При var_dump($rows); выводится NULL.
В заросе косяка быть неможет потому что сам его проверял на phpMyAdmin
Возможно косяк в передаче листа на $rows...
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Re: достать топ лист из phpMyAdmin(loadObjectList())
« Ответ #12 : 28.12.2010, 15:55:41 »
Но все же стоит проверить запрос, так как $rows у Вас NULL.
После $rows = $db->loadObjectList(); добавьте
 
Код
		
if ($db->getErrorNum()) {
JError::raiseError(500, $db->stderr());
}
*

Diiimonn

  • Захожу иногда
  • 234
  • 29 / 0
Re: достать топ лист из phpMyAdmin(loadObjectList())
« Ответ #13 : 28.12.2010, 16:01:39 »
весь листинг функции приведите
Создание расширений для Joomla
Skype: diiimonn
ICQ: 351181332
*

konstantinopol

  • Захожу иногда
  • 66
  • 2 / 0
Re: достать топ лист из phpMyAdmin(loadObjectList())
« Ответ #14 : 28.12.2010, 20:44:38 »
Но все же стоит проверить запрос, так как $rows у Вас NULL.
После $rows = $db->loadObjectList(); добавьте
 
Код
		
if ($db->getErrorNum()) {
JError::raiseError(500, $db->stderr());
}

Действительно выдёт ошибку...
Код
500 - DB function failed with error number 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 0, 10' at line 1 SQL=SELECT a.id, f.title FROM lie_redim_starvote AS a INNER JOIN lie_content AS f ON a.id = f.id ORDER BY (a.total_value/a.total_votes) DESC LIMIT 10 LIMIT 0, 10

никак не думал что проблема заключается в DB...
Щас буду рыться и думать как устранить эту проблему.
Буду рад подсказкам! ))
*

konstantinopol

  • Захожу иногда
  • 66
  • 2 / 0
Re: достать топ лист из phpMyAdmin(loadObjectList())
« Ответ #15 : 28.12.2010, 20:45:34 »
весь листинг функции приведите

Если я правильно понял что требуется... то вот...
Код
<?php

// no direct access
defined('_JEXEC') or die('Restricted access');

require_once (JPATH_SITE.DS.'components'.DS.'com_content'.DS.'helpers'.DS.'route.php');

class modMostReadBySectionOrCategoryHelper
{
function getList(&$params)
{
global $mainframe;

$db =& JFactory::getDBO();
$user =& JFactory::getUser();

$menus = &JSite::getMenu();
$currentMenu = $menus->getActive();
$menuOption=$currentMenu->query['option'];

if($menuOption=='com_content'){
$menuView=$currentMenu->query['view'];
if($menuView=='section'){
$secid=$currentMenu->query['id'];
$secCondition = ' AND a.sectionid='.$secid;
}elseif($menuView=='category'){
$catid=$currentMenu->query['id'];
$catCondition = ' AND a.catid='.$catid;
}
}elseif($menuOption=='com_sectionex'){
$menuView=$currentMenu->query['view'];
if($menuView=='category'){
$secid=$currentMenu->query['id'];
$secCondition = ' AND a.sectionid='.$secid;
}
}

$count = intval($params->get('count', 10));
$show_front = $params->get('show_front', 1);
$aid = $user->get('aid', 0);

$contentConfig = &JComponentHelper::getParams( 'com_content' );
$access = !$contentConfig->get('show_noauth');

$nullDate = $db->getNullDate();
jimport('joomla.utilities.date');
$date = new JDate();
$now = $date->toMySQL();

if ($catid) {
$ids = explode( ',', $catid );
JArrayHelper::toInteger( $ids );
$catCondition = ' AND (cc.id=' . implode( ' OR cc.id=', $ids ). ')';
}
if ($secid) {
$ids = explode( ',', $secid );
JArrayHelper::toInteger( $ids );
$secCondition = ' AND (s.id=' . implode( ' OR s.id=', $ids ). ')';
}

//Content Items only
$query = 'SELECT f.title' .
' FROM #__redim_starvote AS a' .
' INNER JOIN #__content AS f ON a.id = f.id' .
' ORDER BY (a.total_value/a.total_votes) DESC'.
' LIMIT 10';

$db->setQuery($query, 0, $count);
$rows=$db->loadObjectList();



var_dump($rows);
$i=0;
$lists = array();
for ($i=0; $i < 10; $i++) {


$lists[$i] = htmlspecialchars($rows[$i]->f.title);
}

return $lists;
}
}
« Последнее редактирование: 28.12.2010, 20:52:18 от konstantinopol »
*

konstantinopol

  • Захожу иногда
  • 66
  • 2 / 0
Re: достать топ лист из phpMyAdmin(loadObjectList())
« Ответ #16 : 28.12.2010, 21:12:25 »
всем спасибо, проблема была в LIMIT 10
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Убила базу в phpMyadmin... ее можно вернуть?

Автор uspeh29

Ответов: 1
Просмотров: 1270
Последний ответ 31.10.2010, 14:50:24
от Lex