function fn_get_user_purchased_products($user_id, $sort_by = 'date', $group_by_category = false, $lang_code = CART_LANGUAGE) { if (empty($user_id)) { return array(); } // Статусы заказов: P (оплачен), C (выполнен) $allowed_statuses = array('P', 'C'); $order_by = ($sort_by == 'amount') ? "total_amount DESC" : "max_date DESC"; // ИСПРАВЛЕНО: Добавлен LEFT JOIN к ?:products_categories для получения главной категории (link_type = 'M') $purchased_products = db_get_hash_array( "SELECT items.product_id, SUM(items.amount) as total_amount, MAX(orders.timestamp) as max_date, descr.product, products.product_code, pc.category_id as main_category FROM ?:order_details as items LEFT JOIN ?:orders as orders ON orders.order_id = items.order_id LEFT JOIN ?:products as products ON products.product_id = items.product_id LEFT JOIN ?:product_descriptions as descr ON descr.product_id = items.product_id AND descr.lang_code = ?s LEFT JOIN ?:products_categories as pc ON pc.product_id = items.product_id AND pc.link_type = 'M' WHERE orders.user_id = ?i AND orders.status IN (?a) AND products.product_id IS NOT NULL GROUP BY items.product_id ORDER BY " . $order_by, 'product_id', $lang_code, $user_id, $allowed_statuses ); if (empty($purchased_products)) { return array(); } $params = array( 'pid' => array_keys($purchased_products), 'get_images' => true ); list($products, ) = fn_get_products($params); foreach ($products as &$product) { $p_id = $product['product_id']; if (isset($purchased_products[$p_id])) { $product['total_amount'] = $purchased_products[$p_id]['total_amount']; $product['max_date'] = $purchased_products[$p_id]['max_date']; $product['main_category'] = $purchased_products[$p_id]['main_category']; } } unset($product); // Сортировка if ($sort_by == 'amount') { uasort($products, function($a, $b) { if ($a['total_amount'] == $b['total_amount']) return 0; return ($a['total_amount'] < $b['total_amount']) ? 1 : -1; }); } else { uasort($products, function($a, $b) { if ($a['max_date'] == $b['max_date']) return 0; return ($a['max_date'] < $b['max_date']) ? 1 : -1; }); } if ($group_by_category) { $grouped_products = array(); $category_ids = array_column($products, 'main_category'); $category_ids = array_filter(array_unique($category_ids)); // Убираем пустые ID $category_names = array(); if (!empty($category_ids)) { $category_names = db_get_hash_single_array( "SELECT category_id, category FROM ?:category_descriptions WHERE category_id IN (?n) AND lang_code = ?s", array('category_id', 'category'), $category_ids, $lang_code ); } foreach ($products as $product) { $cat_id = !empty($product['main_category']) ? $product['main_category'] : 0; $cat_name = isset($category_names[$cat_id]) ? $category_names[$cat_id] : 'Без категории'; $grouped_products[$cat_name][] = $product; } return $grouped_products; } return $products; } Системы хранения данных :: Системы хранения данных Dell

Фильтры товаров

Производитель