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

[Решено] Блок Похожие товары. Как выводить только ненулевые позиции?

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

Добрый день. Стоит ocStore 1.5.4.1.

 

Подскажите, пожалуйста, как сделать так, чтобы в блоке Похожие товары (был в сборке) показывались лишь ненулевые позиции.

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


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

catalog/model/catalog/product.php

	public function getProductRelated($product_id) {
...
AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'");
...
>>

	public function getProductRelated($product_id) {
...
AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND p.quantity>0");
...

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


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

catalog/model/catalog/product.php

	public function getProductRelated($product_id) {
...
AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'");
...
>>

	public function getProductRelated($product_id) {
...
AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND p.quantity>0");
...

Большое спасибо, всё заработало!

 

Возможно, раз всё решается одной строчкой, имеет смысл добавить тему в FAQ?

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


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

Аналогичный вопрос вдогон. Стоит сторонний блок "С этим товаром также покупали", выглядит так

 

<?php
 
class ModelModuleAlsopurchased extends Model
{
    public function getPurchasedProductsPerProductId( $product_id, $limit )
    {
        if ( $this->customer->isLogged() )
        {
            $customer_group_id = $this->customer->getCustomerGroupId();
        }
        else
        {
            $customer_group_id = $this->config->get( 'config_customer_group_id' );
        }
 
        $product_data = $this->cache->get( 'product.alsopurchased.' . ( int )$this->
            config->get( 'config_language_id' ) . '.' . ( int )$this->config->get( 'config_store_id' ) .
            '.' . $customer_group_id . '.' . ( int )$limit . '.' . ( int )$product_id );
 
        if ( !$product_data )
        {
            $product_data = array();
 
            $sql = "SELECT order_id FROM " . DB_PREFIX .
                "order_product WHERE product_id = '" . ( int )$product_id . "'";
            $query = $this->db->query( $sql );
 
            $order_id = array();
            foreach ( $query->rows as $result )
            {
                $order_id[] = $result['order_id'];
            }
            
            $orders_id = implode( ',', $order_id );
            if ( !$orders_id )
            {
                $orders_id = 0;
            }
 
            $sql = "SELECT op.product_id, COUNT(*) AS total FROM " .
                DB_PREFIX . "order_product op LEFT JOIN `" . DB_PREFIX .
                "order` o ON (op.order_id = o.order_id) LEFT JOIN `" . DB_PREFIX .
                "product` p ON (op.product_id = p.product_id)";
 
            $sql .= " LEFT JOIN " . DB_PREFIX .
                "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE o.order_status_id > '0' AND p.status = '1'";
 
            $sql .= " AND p.date_available <= NOW() AND op.order_id IN (" . $orders_id .
                ") AND op.product_id != '" . ( int )$product_id . "'";
 
            $sql .= " AND p2s.store_id = '" . ( int )$this->config->get( 'config_store_id' ) .
                "' GROUP BY op.product_id ORDER BY total DESC LIMIT " . ( int )$limit;
 
            $query = $this->db->query( $sql );
 
            $this->load->model( 'catalog/product' );
 
            foreach ( $query->rows as $result )
            {
                $product_data[$result['product_id']] = $this->model_catalog_product->getProduct( $result['product_id'] );
            }
 
            $this->cache->set( 'product.alsopurchased.' . ( int )$this->config->get( 'config_language_id' ) .
                '.' . ( int )$this->config->get( 'config_store_id' ) . '.' . $customer_group_id .
                '.' . ( int )$limit . '.' . ( int )$product_id, $product_data );
        }
        return $product_data;
    }
}
 
Куда здесь нужно добавить условие AND p.quantity>0 или что-то ещё, чтобы в этом модуле тоже показывались лишь ненулевые позиции?

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


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

код в [сode]

$sql .= " LEFT JOIN " . DB_PREFIX .
                "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE o.order_status_id > '0' AND p.status = '1' AND p.quantity>0";

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


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

А здесь точно нужно добавлять AND p.quantity>0 а не AND p.quantity>'0' ?

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


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

можете взять в кавычки, но это не обязательно.

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


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

Уважаемый afwollis, у меня стоит задача не выводить позиций, у которых статус "нет в наличии". Движок версии 1.5.3.1. Что-то я совсем забыл, можно ли в визуальной части движка этот параметр изменить?

 

Если нет, где это вручную написать?

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


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

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

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

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

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

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

Войти

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

Войти

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

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

×

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

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