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

Sergeyy

  • Захожу иногда
  • 154
  • 3 / 0
Уважаемые Знатоки J!
Бьюсь два дня.
При любых манипуляциях с кодом Ругается на:  Invalid argument supplied for foreach()
 !

Как я понял нужно править кусок кода модели:

Код
	public function getItem() 
{
if (!isset($this->item))
{
$id = $this->getState('message.id');
$this->_db->setQuery($this->_db->getQuery(true)
->from('#__helloworld as h')
->leftJoin('#__categories as c ON h.catid=c.id')
->select('h.greeting, h.params, c.title as category')
->where('h.id=' . (int)$id));
if (!$this->item = $this->_db->loadObject())
{
$this->setError($this->_db->getError());
}
else
{
// Load the JSON string
$params = new JRegistry;
$params->loadJSON($this->item->params);
$this->item->params = $params;
 
// Merge global params with item params
$params = clone $this->getState('params');
$params->merge($this->item->params);
$this->item->params = $params;
}
}
return $this->item;
}

и шаблон:
Код
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
?>
<h1><?php echo $this->item->greeting.(($this->item->category and $this->item->params->get('show_category'))? (' ('.$this->item->category.')') : ''); ?></h1>

Помогите разобраться!
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: Как в com_helloworld вывести всю таблицу?
« Ответ #1 : 03.12.2013, 17:58:45 »
А что вы пытаетесь в цикле перебрать если получаете одиночный объект! У вас же возврат не массива!
и где у вас ругается? на какой строке? где полный код, и копипаст ошибки?
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Re: Как в com_helloworld вывести всю таблицу?
« Ответ #2 : 03.12.2013, 18:25:47 »
Нужно как минимум создать представление, которе будет выводить список записей.
*

Sergeyy

  • Захожу иногда
  • 154
  • 3 / 0
Re: Как в com_helloworld вывести всю таблицу?
« Ответ #3 : 03.12.2013, 18:52:17 »
функцию getItem сократил до минимума:

   public function getItem()
   {
         $this->_db->setQuery
         ($this->_db->getQuery(true)
            ->from('#__helloworld')
            ->select('*'));
         $this->item = $this->_db->loadObject();
      return $this->item;
   }


шаблон:

<?php foreach($items as $item) : ?>
<div class="comm_box_top">
<span class="comm_greeting"> <?php echo $item->greeting; ?> </span>
<span class="comm_id"> <?php echo $item->id; ?> </span>
</div>
<?php endforeach;  ?>

как внедрить loadObjectList не знаю.
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: Как в com_helloworld вывести всю таблицу?
« Ответ #4 : 03.12.2013, 19:00:29 »
У вам метод getItem вы пытаетесь перебрать items..
в нем вы получаете одиночный объект, а вам нужно массив объектов...
покажите ваш вид!, как вы получаете $this->items...
что бы получить массив объектов нужно юзать не $this->_db->loadObject(),  а $this->_db->loadObjectList()!
*

Sergeyy

  • Захожу иногда
  • 154
  • 3 / 0
Re: Как в com_helloworld вывести всю таблицу?
« Ответ #5 : 03.12.2013, 19:00:46 »
так?

   public function getItem()
   {
      $db = JFactory::getDbo();      
      $query = $db->getQuery(TRUE);
      $query->select("*");
      $query->from("#__helloworld");
      $db->setQuery($query);
      $items = $db->loadObjectList();
      return $items;
}
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: Как в com_helloworld вывести всю таблицу?
« Ответ #6 : 03.12.2013, 19:01:30 »
так
*

Sergeyy

  • Захожу иногда
  • 154
  • 3 / 0
Re: Как в com_helloworld вывести всю таблицу?
« Ответ #7 : 03.12.2013, 19:04:17 »
Получаем:
Warning: Invalid argument supplied for foreach() in Z:\home\joomla.loc\www\components\com_helloworld\views\helloworld\tmpl\default.php on line 8

<?php foreach($items as $item) : ?>    ---------- line 8
<div class="comm_box_top">
<span class="comm_greeting"> <?php echo $item->greeting; ?> </span>
<span class="comm_id"> <?php echo $item->id; ?> </span>
</div>
<?php endforeach;  ?>
*

Sergeyy

  • Захожу иногда
  • 154
  • 3 / 0
Re: Как в com_helloworld вывести всю таблицу?
« Ответ #8 : 03.12.2013, 19:19:07 »
Нужно и views\helloworld\view.html.php править?
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: Как в com_helloworld вывести всю таблицу?
« Ответ #9 : 03.12.2013, 19:22:02 »
ну для начала покажите что у вас в view.html.php
но 99% там $this->item = $this->get('Item');
а потом вы пробуете перебрать $tems откуда у вас эта переменная вообще взялась? в шаблоне?
*

Sergeyy

  • Захожу иногда
  • 154
  • 3 / 0
Re: Как в com_helloworld вывести всю таблицу?
« Ответ #10 : 03.12.2013, 19:24:34 »
Там всё как было

class RewComViewRewCom extends JView
{
   // Overwriting JView display method
   function display($tpl = null)
   {
      // Assign data to the view
      $this->item = $this->get('Item');
 
      // Check for errors.
      if (count($errors = $this->get('Errors')))
      {
         JError::raiseError(500, implode('<br />', $errors));
         return false;
      }
      // Display the view
      parent::display($tpl);
   }
}
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: Как в com_helloworld вывести всю таблицу?
« Ответ #11 : 03.12.2013, 19:27:06 »
Ну все правильно!
вы получаете то что в модели в методе getItem() вот тут: $this->item = $this->get('Item');
а потом вы пробуете перебрать какой то $items, откуда он у вас взялся?
<?php foreach($this->item as $item) : ?>
...
*

Sergeyy

  • Захожу иногда
  • 154
  • 3 / 0
Re: Как в com_helloworld вывести всю таблицу?
« Ответ #12 : 03.12.2013, 19:34:00 »
Всё запутался Я

Я не писал компоненты, только пара модулей и плагин!
Поэтому и не пойму, что куда.
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: Как в com_helloworld вывести всю таблицу?
« Ответ #13 : 03.12.2013, 19:41:44 »
Всё запутался Я

Я не писал компоненты, только пара модулей и плагин!
Поэтому и не пойму, что куда.

Ваш вид view.html.php в строке:   $this->item = $this->get('Item'); обращается к модели и получает из метода (который я вам немного оптимизировал):
Код: php
public function getItem() {
      $db = JFactory::getDbo();      
      $query = $db->getQuery(true)->select('*')->from('#__helloworld');
      return  $db->setQuery($query)->loadObjectList();
}
Результат запроса в виде массива объектов! тоесть по сути $this->get('Item') обращается к getItem() тот что в модели!
После этого результат, который вернет  метод  getItem() из модели, помещается в переменную $this->item!
В шаблоне вида view/ващ_вид/default.php эта переменная будет доступна по $this->item!
Вам нужно в цикле использовать $this->item для перебора!
Код: php
<?php foreach($this->item as $item) : ?>    ---------- line 8
<div class="comm_box_top">
<span class="comm_greeting"> <?php echo $item->greeting; ?> </span>
<span class="comm_id"> <?php echo $item->id; ?> </span>
</div>
<?php endforeach;  ?>
*

Sergeyy

  • Захожу иногда
  • 154
  • 3 / 0
Re: Как в com_helloworld вывести всю таблицу?
« Ответ #14 : 03.12.2013, 19:43:56 »
ПОЛУЧИЛОСЬ! Istaan, b2z СПАСИБО! *DRINK*

Значит в модели:
public function getItem()
   {
      $db = JFactory::getDbo();     
      $query = $db->getQuery(TRUE);
      $query->select("*");
      $query->from("#__helloworld");
      $db->setQuery($query);
      $items = $db->loadObjectList();
      return $items;
}

В представлении:
$this->items = $this->get('Item');

В шаблоне:
<?php foreach($this->items as $item) : ?>
<div class="comm_box_top">
<span class="comm_greeting"> <?php echo $item->greeting; ?> </span>
<span class="comm_id"> <?php echo $item->id; ?> </span>
</div>
<?php endforeach;  ?>
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: Как в com_helloworld вывести всю таблицу?
« Ответ #15 : 03.12.2013, 19:45:27 »
Да все правильно, только для красоты переименуйте метод в модели с public function getItem(), в public function getItems()
и напишите $this->items = $this->get('Items'); в виде, вместо $this->items = $this->get('Item');
*

Sergeyy

  • Захожу иногда
  • 154
  • 3 / 0
Re: Как в com_helloworld вывести всю таблицу?
« Ответ #16 : 03.12.2013, 19:49:16 »
Ок! Istaan отдельное спасибо за разъяснение!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Передача переменной в таблицу #_user_usergroup_map

Автор banditman

Ответов: 8
Просмотров: 1836
Последний ответ 27.03.2015, 11:11:38
от banditman
[Решено] Как вывести строки из бд - удовлетворяющие требование SQL запроса!

Автор artemka

Ответов: 11
Просмотров: 1612
Последний ответ 21.07.2014, 20:58:07
от artemka
Как вывести ссылку на выведенную статью?

Автор artemka

Ответов: 3
Просмотров: 1274
Последний ответ 15.06.2014, 11:03:59
от artemka
Как вывести определённые материалы в статье?

Автор artemka

Ответов: 0
Просмотров: 958
Последний ответ 13.06.2014, 12:19:32
от artemka
Строк нет - и таблицу долой! Как заскриптовать?

Автор verstalshik

Ответов: 24
Просмотров: 1424
Последний ответ 22.04.2014, 21:24:58
от verstalshik