Есть функция которая собирает информацию по товару чтоб потом собрать это в 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));
В итоге изображения выводятся все как нужно, а вот свойства выводятся как нужно, но только в конце
За сбор свойств отвечает вот эта часть
//Получим свойства
$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, но ума не приложу почему выводит только последний товар