Новости Joomla

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

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

  • Глобальный модератор
  • 7287
  • 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

  • Глобальный модератор
  • 7287
  • 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

  • Глобальный модератор
  • 7287
  • 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
Просмотров: 1255
Последний ответ 31.10.2010, 14:50:24
от Lex