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

В категории у товара вывести количество рекомендуемых товаров

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

Как в категории у каждого товара вывести цифру количества рекомендуемых товаров данного товара?

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


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

рекомендуемых товаров данного товара

:? О чем речь? Каждому товару присвоены связи с другими товарами и Вы хотите посчитать количество связей для каждого конкретного товара?

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


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

рекомендуемых товаров данного товара

:? О чем речь? К товару присвоена связь с другими товарами и Вы хотите посчитать количество связей для каждого товара?

 

На странице категории у каждого товара вывести число рекомендуемых товаров данного товара. Мне кажется верно изъяснился

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


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

Ага. Понял. Звучит очень непрактично, но задача интересная. Ща напишу решение... 10 минут...)

  • +1 1

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


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

мне кажется нужно подсчет рекомендуемых делать при выводе в цикле товаров на странице категории, и в его контроллере

 

Ага. Понял. Звучит очень непрактично, но задача интересная. Ща напишу решение... 10 минут...)

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


Ссылка на сообщение
Поделиться на другие сайты
В контрллере категории catalog\controller\product\category.php
Есть строка 
$results = $this->model_catalog_product->getProducts($data);
Поэтому залазим в контроллер catalog\model\catalog\product.php и находим метод getProducts().
Там мы видим SQL запрос. Переписываем его.
$sql = "SELECT p.product_id, (SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT COUNT(*) FROM " . DB_PREFIX . "product_related pr WHERE pr.product_id = p.product_id) AS related, (SELECT price FROM " . DB_PREFIX . "product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '" . (int)$customer_group_id . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$customer_group_id . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special"; 
Все... Дальше не интересно. В файле catalog\view\theme\ваш_шаблон\template\product\category.tpl теперь доступна переменная $product['related'], которая содержит числовое значение.
 
P.S. Сам не проверял.
 
UPDATED:
Кажется я фигню написал. Там ниже вызов в цикле:
foreach ($query->rows as $result) {
			$product_data[$result['product_id']] = $this->getProduct($result['product_id']);
		}

О, чудесный OpenCart! О, божественная архитектура!

 

Значит так... Забыли про getProducts. Вместо того, чтобы редактировать метод getProducts нужно редактировать getProduct по аналогии т.е. 

$query = $this->db->query("SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT price FROM " . DB_PREFIX . "product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '" . (int)$customer_group_id . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT COUNT(*) FROM " . DB_PREFIX . "product_related pr WHERE pr.product_id = p.product_id) AS related, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$customer_group_id . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT points FROM " . DB_PREFIX . "product_reward pr WHERE pr.product_id = p.product_id AND customer_group_id = '" . (int)$customer_group_id . "') AS reward, (SELECT ss.name FROM " . DB_PREFIX . "stock_status ss WHERE ss.stock_status_id = p.stock_status_id AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "') AS stock_status, (SELECT wcd.unit FROM " . DB_PREFIX . "weight_class_description wcd WHERE p.weight_class_id = wcd.weight_class_id AND wcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS weight_class, (SELECT lcd.unit FROM " . DB_PREFIX . "length_class_description lcd WHERE p.length_class_id = lcd.length_class_id AND lcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS length_class, (SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) WHERE p.product_id = '" . (int)$product_id . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'");

UPDATE 2:

В этом прекрасном полотне надо добавить 

if ($query->num_rows) {
			return array(
				'product_id'       => $query->row['product_id'],
                                'related' => $query->row['related'], // вот это добавлено
				'name'             => $query->row['name'],
				'description'      => $query->row['description'],
				'meta_description' => $query->row['meta_description'],
				'meta_keyword'     => $query->row['meta_keyword'],
				'tag'              => $query->row['tag'],
				'model'            => $query->row['model'],
				'sku'              => $query->row['sku'],
				'upc'              => $query->row['upc'],
				'ean'              => $query->row['ean'],
				'jan'              => $query->row['jan'],
				'isbn'             => $query->row['isbn'],
				'mpn'              => $query->row['mpn'],
				'location'         => $query->row['location'],
				'quantity'         => $query->row['quantity'],
				'stock_status'     => $query->row['stock_status'],
				'image'            => $query->row['image'],
				'manufacturer_id'  => $query->row['manufacturer_id'],
				'manufacturer'     => $query->row['manufacturer'],
				'price'            => ($query->row['discount'] ? $query->row['discount'] : $query->row['price']),
				'special'          => $query->row['special'],
				'reward'           => $query->row['reward'],
				'points'           => $query->row['points'],
				'tax_class_id'     => $query->row['tax_class_id'],
				'date_available'   => $query->row['date_available'],
				'weight'           => $query->row['weight'],
				'weight_class_id'  => $query->row['weight_class_id'],
				'length'           => $query->row['length'],
				'width'            => $query->row['width'],
				'height'           => $query->row['height'],
				'length_class_id'  => $query->row['length_class_id'],
				'subtract'         => $query->row['subtract'],
				'rating'           => round($query->row['rating']),
				'reviews'          => $query->row['reviews'] ? $query->row['reviews'] : 0,
				'minimum'          => $query->row['minimum'],
				'sort_order'       => $query->row['sort_order'],
				'status'           => $query->row['status'],
				'date_added'       => $query->row['date_added'],
				'date_modified'    => $query->row['date_modified'],
				'viewed'           => $query->row['viewed']
			);

 

 

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


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

не понял, то что написали не работает?

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


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

UPDATE 2:

 

это в каком файле и строке?

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


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


public function getProduct($product_id) {

if ($this->customer->isLogged()) {

$customer_group_id = $this->customer->getCustomerGroupId();

} else {

$customer_group_id = $this->config->get('config_customer_group_id');

}

//$query = $this->db->query("SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT price FROM " . DB_PREFIX . "product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '" . (int)$customer_group_id . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$customer_group_id . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT points FROM " . DB_PREFIX . "product_reward pr WHERE pr.product_id = p.product_id AND customer_group_id = '" . (int)$customer_group_id . "') AS reward, (SELECT ss.name FROM " . DB_PREFIX . "stock_status ss WHERE ss.stock_status_id = p.stock_status_id AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "') AS stock_status, (SELECT wcd.unit FROM " . DB_PREFIX . "weight_class_description wcd WHERE p.weight_class_id = wcd.weight_class_id AND wcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS weight_class, (SELECT lcd.unit FROM " . DB_PREFIX . "length_class_description lcd WHERE p.length_class_id = lcd.length_class_id AND lcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS length_class, (SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) WHERE p.product_id = '" . (int)$product_id . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'");

$query = $this->db->query("SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT price FROM " . DB_PREFIX . "product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '" . (int)$customer_group_id . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT COUNT(*) FROM " . DB_PREFIX . "product_related pr WHERE pr.product_id = p.product_id) AS related, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$customer_group_id . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT points FROM " . DB_PREFIX . "product_reward pr WHERE pr.product_id = p.product_id AND customer_group_id = '" . (int)$customer_group_id . "') AS reward, (SELECT ss.name FROM " . DB_PREFIX . "stock_status ss WHERE ss.stock_status_id = p.stock_status_id AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "') AS stock_status, (SELECT wcd.unit FROM " . DB_PREFIX . "weight_class_description wcd WHERE p.weight_class_id = wcd.weight_class_id AND wcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS weight_class, (SELECT lcd.unit FROM " . DB_PREFIX . "length_class_description lcd WHERE p.length_class_id = lcd.length_class_id AND lcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS length_class, (SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) WHERE p.product_id = '" . (int)$product_id . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'");

if ($query->num_rows) {

$query->row['price'] = ($query->row['discount'] ? $query->row['discount'] : $query->row['price']);

$query->row['rating'] = (int)$query->row['rating'];

$query->row['related'] = (int)$query->row['related'];

return $query->row;

} else {

return false;

}

}

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


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

saveplanet, работает? Вот и славно. А я уже хотел отругать за вопрос "в какой строке?".

  • +1 1

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


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

Я редактировал только catalog\model\catalog\product.php выше код в шаблоне category.tpl так <?php echo $product['related']; ?>

 

Ничего не выводится, только сообщение об ошибке, нотис

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


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

Я редактировал только catalog\model\catalog\product.php

Все верно.

Ничего не выводится, только сообщение об ошибке, нотис

Ну, если нет ошибки SQL, то данные из базы забираются. А все остальное, как я уже говорил, не интересно. Ищите где проблема. Первая моя догадка в том, что Вы делаете echo $product['related']; за пределами цикла foreach... 

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


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

Я редактировал только catalog\model\catalog\product.php

Все верно.

>Ничего не выводится, только сообщение об ошибке, нотис

Ну, если нет ошибки SQL, то данные из базы забираются. А все остальное, как я уже говорил, не интересно. Ищите где проблема. Первая моя догадка в том, что Вы делаете echo $product['related']; за пределами цикла foreach... 

 

 

Как раз в цикле выводится. Готов отблагодарить за помощь, деньгами :) за решение

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


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

мне кажется дело в запросе

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


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

мне кажется дело в запросе

Так сделайте print_r() и посмотрите.

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


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

в шаблоне?

 

мне кажется дело в запросе

Так сделайте print_r() и посмотрите.

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


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

также 

 

<?php $test=$product['related']; ?>
<?php print_r($test); ?>
 

 

Notice: Undefined index: related in /home/domaain.tld/public_html/catalog/view/theme/default/template/product/category.tpl on line 43

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


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

Поступил проще, при запросе insert или  update рекомендуемых посчитал в цикле простым счетчиком и записал кол-во в таблицу product :) считать на ходу каждый раз во фронтенде не правильно мне кажется, тем более лишний запрос

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

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

×

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

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