Перейти к содержанию
zerok

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

Рекомендуемые сообщения

Столкнулась с тем, что использую рекомендуемые товары для 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'];

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

:)

 

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

Trying to get property of non-object

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну да

 

$query->row['ist'];

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

$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']

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

$rows а не $row

 

внимание к мелочам.  

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

объект 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 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.