Jump to content

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


Recommended Posts

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

 

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

 

Спасибо.
Edited by AFI
Link to post
Share on other sites



$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;

 

Edited by osben
Link to post
Share on other sites

покажите содержимое 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;
		}
Link to post
Share on other sites

 


	$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; ошибки устраняются, но доп. свойства не выводятся.

Link to post
Share on other sites

 

$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;
Edited by osben
Link to post
Share on other sites

перед $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;, но после этого в админке на странице товара  пропадали мультисвойства. Это критическое предупреждение, его  нужно фиксить или можно просто скрыть?

Edited by AFI
Link to post
Share on other sites

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;
}
Link to post
Share on other sites

 

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;
}

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

Link to post
Share on other sites
  • 1 year later...

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

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

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

PHP 5.4 у меня

Link to post
Share on other sites

добавляю 

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

не работает

 

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

Link to post
Share on other sites

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

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

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...