Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Рекомендуемые товары для нескольких магазинов


zerok

Recommended Posts

Столкнулась с тем, что использую рекомендуемые товары для 3 магазинов. 

При этом для каждого из магазинов должен показываться свой список товаров (они могут и пересекаться), сам модуль ( я использую тот, что предустанавливается вместе с opencart) не очень умен. Он берет из конфига перечисление id шников товаров, а потом обрезает по лимиту архив получившихся id  шников, не глядя на то какому магазину принадлежит товар. 

 

Поэтому я его слегка допилила: 

 

в model_catalog_product дописана функция возврата товаров по списку из конфига: 

	public function getProductFeatured($list){
		$sql = "SELECT GROUP_CONCAT(product_id) as list FROM ". DB_PREFIX ."product_to_store WHERE product_id IN ($list) AND store_id = '".(int)$this->config->get('config_store_id')."'";

		$query = $this->db->query($sql);
		foreach ($query->rows as $result) { 		
			$list = $result["list"];
		}
		
		return $list;

		
	}

Результат запроса возвращает туже строку из товаров что и конфиг но только выкинув оттуда все товары, которые к этому магазину не привязаны. 

 

соотв в файле featured.php  (контроллер вывода товаров в каталоге) 

 

меняем строку

		$products = explode(',', $this->config->get('featured_product'));

на строку 

		$products = explode(',', $this->model_catalog_product->getProductFeatured($this->config->get('featured_product')));

Надіслати
Поділитися на інших сайтах

Шикарно!

 

foreach ($query->rows as $result) {         
            $list
= $result["list"];
        }
        
        
return $list;

 

Заменить на

return $result->row['list']

 

Ведь должна вернуться только одна строка

 

 

 

GROUP_CONCAT(product_id)

Если мне помнится, то сепаратор по умолчанию - пробел ' '

GROUP_CONCAT(product_id, ',') - будет верно

 

или же

 

$products = explode(' ', $this->model_catalog_product->getProductFeatured($this->config->get('featured_product')));

Надіслати
Поділитися на інших сайтах

ох..

GROUP_CONCAT(product_id, SEPARATOR ',')

 

или же

 

Что было бы наверное правильно

public function getProductFeatured($list,limi){
        $sql = "SELECT product_id as list FROM ". DB_PREFIX ."product_to_store WHERE product_id IN ($list) AND store_id = '".(int)$this->config->get('config_store_id')."'
LIMIT  (int)$limit

";

        $query = $this->db->query($sql);
        
        return implode(',', $query->rows;

        
    }

$products = explode(',', $this->model_catalog_product->getProductFeatured($this->config->get('featured_product'), $setting['limit']));

Надіслати
Поділитися на інших сайтах

ох..

GROUP_CONCAT(product_id, SEPARATOR ',')

 

или же

 

Что было бы наверное правильно

public function getProductFeatured($list,limi){
        $sql = "SELECT product_id as list FROM ". DB_PREFIX ."product_to_store WHERE product_id IN ($list) AND store_id = '".(int)$this->config->get('config_store_id')."'
LIMIT  (int)$limit

";

        $query = $this->db->query($sql);
        
        return implode(',', $query->rows;

        
    }

$products = explode(',', $this->model_catalog_product->getProductFeatured($this->config->get('featured_product'), $setting['limit']));

 

 

GROUP_CONCAT(product_id SEPARATOR ',') , но у меня по умолчанию была запятая видимо. 

Змінено користувачем zerok
Надіслати
Поділитися на інших сайтах


$sql = "SELECT GROUP_CONCAT(product_id SEPARATOR ',') as list FROM ". DB_PREFIX ."product_to_store WHERE product_id IN ($list) AND store_id = '".(int)$this->config->get('config_store_id')."' LIMIT ".(int)$limit;

$query = $this->db->query($sql);

$result = $query->rows;

$list = $result["0"]["list"];

return $list;

Надіслати
Поділитися на інших сайтах

Не, у меня к  вам никаких претензий,
Я обратил внимание на универсальный синтаксис

Тут как бы еще есть проблема и с длиной GROUP_CONCAT - по умолчанию имеет ограничение - 1024 символов

Надіслати
Поділитися на інших сайтах

		$sql = "SELECT GROUP_CONCAT(product_id SEPARATOR ',') as list FROM ". DB_PREFIX ."product_to_store WHERE product_id IN ($list) AND store_id = '".(int)$this->config->get('config_store_id')."' LIMIT ".(int)$limit;
		$query = $this->db->query($sql);

		$result = $query->rows;
		$list = $result["0"]["list"];
		return $list;

:)

 

return $result->row['list'];

Надіслати
Поділитися на інших сайтах

$sql = "SELECT GROUP_CONCAT(product_id) as list FROM
        $query = $this->db->query($sql);
     

 

return $query->row['list']

 

Должно Быть!!!!

 

вот здесь ОНО есть

$result = $query->rows;
        $list = $result["0"]["list"];

 

$result["0"] ==  $query->row

$result["0"]["list"] == $query->row['list']

Надіслати
Поділитися на інших сайтах

объект query имеет три свойства

 

$query->num_rows - количество возвращенных строк

$query->row - первая строка

$query->rows - все строки

 

Посмотрите в метод db->query

Надіслати
Поділитися на інших сайтах


$query = new stdClass();

                    $query->row = isset($data[0]) ? $data[0] : array();

                    $query->rows = $data;

                    $query->num_rows = $i;

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.