Перейти к содержанию
Официальный форум поддержки Simpla

Как исправить эти ошибки после подключения модуля?


Рекомендуемые сообщения

Добрый день! пожалуйста помогите, после подключения модуля возникли вот такие ошибки.

 

Warning: Invalid argument supplied for foreach() inC:\Programming\OpenServer\domains\local\view\ProductView.phpon line54

Warning: Cannot modify header information - headers already sent by (output started at C:\Programming\OpenServer\domains\local\view\ProductView.php:54) inC:\Programming\OpenServer\domains\local\view\ProductView.phpon line198

Warning: Cannot modify header information - headers already sent by (output started at C:\Programming\OpenServer\domains\local\view\ProductView.php:54) inC:\Programming\OpenServer\domains\local\index.phpon line79
 
в файле ProductView.php
заменял строку 53
$product->features = $this->features->get_product_options(array('product_id'=>$product->id));

 

 
на
$temp_options = array();
            foreach($product->features as $option) {
               $temp_options[$option->feature_id]->feature_id = $option->feature_id;
               $temp_options[$option->feature_id]->name = $option->name;
               $temp_options[$option->feature_id]->values[] = $option->value;
            }

            foreach($temp_options as $id => $option)
               $temp_options[$id]->value = implode(', ', $temp_options[$id]->values);

            $product->features = $temp_options;
Сначала не было, но потом появилась данная проблема в админке

Warning: Creating default object from empty value in C:\Programming\OpenServer\domains\local\simpla\ProductsAdmin.php on line 250

 

Спасибо.
Изменено пользователем AFI
Ссылка на сообщение
Поделиться на другие сайты



$temp_options = array();
foreach($this->features->get_product_options(array('product_id'=>$product->id)) as $option) {
                $temp_options[$option->feature_id] = new stdClass;
$temp_options[$option->feature_id]->feature_id = $option->feature_id;
$temp_options[$option->feature_id]->name = $option->name;
$temp_options[$option->feature_id]->values[] = $option->value;
}

foreach($temp_options as $id => $option)
$temp_options[$id]->value = implode(', ', $temp_options[$id]->values);

$product->features = $temp_options;

 

Изменено пользователем osben
Ссылка на сообщение
Поделиться на другие сайты

покажите содержимое ProductsAdmin.php on line 250

$query = $this->db->placehold("SELECT category_id FROM s_products_categories 
WHERE product_id = ? LIMIT 1", $product->id);
                $this->db->query($query);
                $cat_id->category_id = $this->db->result('category_id'); //строка 250 

Так же в админке на странице товара вылазит таже ошибка

 

if(is_array($options))
		{
   			$temp_options = array();
   			foreach($options as $option) {
       			$temp_options[$option->feature_id]->feature_id = $option->feature_id; //ссылается на эту строку
       			if(is_array($option->value))
           			$temp_options[$option->feature_id]->values = $option->value;
       			else
           			$temp_options[$option->feature_id]->values[] = $option->value;
   		}

   			$options = $temp_options;
		}
Ссылка на сообщение
Поделиться на другие сайты

 


	$temp_options = array();
	foreach($this->features->get_product_options(array('product_id'=>$product->id)) as $option) {
                $temp_options[$option->feature_id] = new stdClass;
		$temp_options[$option->feature_id]->feature_id = $option->feature_id;
		$temp_options[$option->feature_id]->name = $option->name;
		$temp_options[$option->feature_id]->values[] = $option->value;
	}

	foreach($temp_options as $id => $option)
		$temp_options[$id]->value = implode(', ', $temp_options[$id]->values);

	$product->features = $temp_options;

Это модуль мультисвойств, после определения класа $temp_options[$option->feature_id] = new stdClass; ошибки устраняются, но доп. свойства не выводятся.

Ссылка на сообщение
Поделиться на другие сайты

 

$query = $this->db->placehold("SELECT category_id FROM s_products_categories 
WHERE product_id = ? LIMIT 1", $product->id);
                $this->db->query($query);
                $cat_id->category_id = $this->db->result('category_id'); //строка 250 

Так же в админке на странице товара вылазит таже ошибка

 

if(is_array($options))
		{
   			$temp_options = array();
   			foreach($options as $option) {
       			$temp_options[$option->feature_id]->feature_id = $option->feature_id; //ссылается на эту строку
       			if(is_array($option->value))
           			$temp_options[$option->feature_id]->values = $option->value;
       			else
           			$temp_options[$option->feature_id]->values[] = $option->value;
   		}

   			$options = $temp_options;
		}

перед $cat_id->category_id = $this->db->result('category_id'); //строка 250

 $cat_id = new stdClass;

 

 

	$temp_options = array();
	foreach($this->features->get_product_options(array('product_id'=>$product->id)) as $option) {
		if(empty($temp_options[$option->feature_id]))
		{
			$temp_options[$option->feature_id] = new stdClass;
			$temp_options[$option->feature_id]->feature_id = $option->feature_id;
			$temp_options[$option->feature_id]->name = $option->name;
			$temp_options[$option->feature_id]->values = array();
		}

		$temp_options[$option->feature_id]->values[] = $option->value;
	}

	foreach($temp_options as $id => $option)
		$temp_options[$id]->value = implode(', ', $temp_options[$id]->values);

	$product->features = $temp_options;
Изменено пользователем osben
Ссылка на сообщение
Поделиться на другие сайты

перед $cat_id->category_id = $this->db->result('category_id'); //строка 250

 $cat_id = new stdClass;

Ошибка на странице админки исчезла. 

 

 

	$temp_options = array();
	foreach($this->features->get_product_options(array('product_id'=>$product->id)) as $option) {
		if(empty($temp_options[$option->feature_id]))
		{
			$temp_options[$option->feature_id] = new stdClass;
			$temp_options[$option->feature_id]->feature_id = $option->feature_id;
			$temp_options[$option->feature_id]->name = $option->name;
			$temp_options[$option->feature_id]->values = array();
		}

		$temp_options[$option->feature_id]->values[] = $option->value;
	}

	foreach($temp_options as $id => $option)
		$temp_options[$id]->value = implode(', ', $temp_options[$id]->values);

	$product->features = $temp_options;

Код выше вставил в файл productView.php и  ошибки пропали, все заработало. Огромное спасибо!

Но, осталось одно предупреждение в админке на странице товара 

 

Warning: Creating default object from empty value in C:\Programming\OpenServer\domains\local\simpla\ProductAdmin.php on line 372

if(is_array($options))
		{
   			$temp_options = array();
   			foreach($options as $option) {
       			$temp_options[$option->feature_id]->feature_id = $option->feature_id; // 372 строка
       			if(is_array($option->value))
           			$temp_options[$option->feature_id]->values = $option->value;
       			else
           			$temp_options[$option->feature_id]->values[] = $option->value;
   		}

   			$options = $temp_options;
		}

Я добавлял строку $temp_options[$option->feature_id] = new stdClass;, но после этого в админке на странице товара  пропадали мультисвойства. Это критическое предупреждение, его  нужно фиксить или можно просто скрыть?

Изменено пользователем AFI
Ссылка на сообщение
Поделиться на другие сайты

if(is_array($options))
{
$temp_options = array();
foreach($options as $option) {
if(empty($temp_options[$option->feature_id]))
$temp_options[$option->feature_id] = new stdClass;

$temp_options[$option->feature_id]->feature_id = $option->feature_id;
if(is_array($option->value))
$temp_options[$option->feature_id]->values = $option->value;
else
$temp_options[$option->feature_id]->values[] = $option->value;
}

$options = $temp_options;
}
Ссылка на сообщение
Поделиться на другие сайты

 

if(is_array($options))
{
	$temp_options = array();
	foreach($options as $option) {
		if(empty($temp_options[$option->feature_id]))
			$temp_options[$option->feature_id] = new stdClass;

		$temp_options[$option->feature_id]->feature_id = $option->feature_id;
		if(is_array($option->value))
			$temp_options[$option->feature_id]->values = $option->value;
		else
			$temp_options[$option->feature_id]->values[] = $option->value;
	}

	$options = $temp_options;
}

Еще раз, Спасибо вам огромное. Все работает.

Ссылка на сообщение
Поделиться на другие сайты
  • 1 год спустя...

у меня без 

 

$temp_options[$option->feature_id] = new stdClass; 

 

всё работает.

Что я не так делаю?

 

скорее всего у вас старая версия php просто. там этого не надо было

Ссылка на сообщение
Поделиться на другие сайты

Вы читать умеете??

Какое отношение имеет версия Симплы к версии PHP на сервере?

спасибо, что обратили внимание, реально про php шла речь))

PHP 5.4 у меня

Ссылка на сообщение
Поделиться на другие сайты

добавляю 

$temp_options[$option->feature_id] = new stdClass;

не работает

 

я написал что для php5.4 вам не нужно это добавлять. если у вас все работает как вы выше написали. зачем вы себе придумываете?

Ссылка на сообщение
Поделиться на другие сайты

я написал что для php5.4 вам не нужно это добавлять. если у вас все работает как вы выше написали. зачем вы себе придумываете?

прогресс не стоит на месте, когда то нужно же будет переходить на php 7

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...