@WebforSelf

Где ошибка в массиве PHP?

Есть функция которая собирает информацию по товару чтоб потом собрать это в EXCEL

private function prepareProducts($filter = array()) {
		$products = array();
        foreach($this->products->get_products($filter) as $p) {
            $products[$p->id] = $p;
        }
  

   
        if(!empty($products)) {
						
			$products_ids = array_keys($products);
			foreach($products as $product) {
				$product->variants = array();
				$product->options = $product->id;
			}
			
   
			$variants = $this->variants->get_variants(array('product_id'=>$products_ids));

			foreach($variants as $variant) {
				$products[$variant->product_id]->variants[] = $variant;
			}

			foreach($products as $product) {
                if(isset($product->variants[0])) {
                    $product->variant = $product->variants[0];
                }
			}
			
		//Получим свойства
		$options = $this->features->get_product_options($product->id);

		foreach ($options as $option) {
			if(empty($products[$option->product_id]->options))
		$products[$option->product_id]->options = $option->name.' - '.$option->value;	
	        else
		    $products[$option->product_id]->options .= ', '.$option->name.' - '.$option->value;
		}	
						
			
		// Изображения товаров
 		$images = $this->products->get_images(array('product_id'=>$products_ids));
 		foreach($images as $image)
 		{
 			// Добавляем изображения к товару чезер запятую 
 			if(empty($products[$image->product_id]->images))
 				$products[$image->product_id]->images = $this->config->root_url.'/files/originals/'.$image->filename;
 			else
 				$products[$image->product_id]->images .= ', '.$this->config->root_url.'/files/originals/'.$image->filename;
 		}
			

 		}
        return $products;
    }


Важный элемент это //Получим свойства и // Изображения товаров

Там мы получаем массив названий фото и названий свойств.

функция к которой мы обращаемся для получения свойств

public function get_product_options($product_id)
	{
		$query = $this->db->placehold("SELECT f.id as feature_id, f.name, po.value, po.product_id FROM __options po LEFT JOIN __features f ON f.id=po.feature_id
										WHERE po.product_id in(?@) ORDER BY f.position", (array)$product_id);

		$this->db->query($query);
		$res = $this->db->results();

		return $res;
	}


функция получения изображений

function get_images($filter = array())
	{		
		$product_id_filter = '';
		$group_by = '';

		if(!empty($filter['product_id']))
			$product_id_filter = $this->db->placehold('AND i.product_id in(?@)', (array)$filter['product_id']);

		// images
		$query = $this->db->placehold("SELECT i.id, i.product_id, i.name, i.filename, i.position
									FROM __images AS i WHERE 1 $product_id_filter $group_by ORDER BY i.product_id, i.position");
		$this->db->query($query);
		return $this->db->results();
	}


Потом вывожу фото и свойства

$file = $product->images;
			$po = $product->options;			
			$sheet->setCellValue('F'.$i, strval($file));														   
	        $sheet->setCellValue('G'.$i, strval($po));


В итоге изображения выводятся все как нужно, а вот свойства выводятся как нужно, но только в конце
60e5e0e3db9d6003296921.png

За сбор свойств отвечает вот эта часть
//Получим свойства
		$options = $this->features->get_product_options($product->id);

		foreach ($options as $option) {
			if(empty($products[$option->product_id]->options))
		$products[$option->product_id]->options = $option->name.' - '.$option->value;	
	        else
		    $products[$option->product_id]->options .= ', '.$option->name.' - '.$option->value;
		}


и функция get_product_options, но ума не приложу почему выводит только последний товар
  • Вопрос задан
  • 110 просмотров
Решения вопроса 1
@galaxy
А что вы хотели, если:
//Получим свойства
    $options = $this->features->get_product_options($product->id);

?

$products_ids наверное имелось в виду?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы