Неправильно определяется количество товара во вкладке рекомендуемые

Тема в разделе "Opencart", создана пользователем Ed71, 6 июл 2015.

Информация :
Внимание форумчане! При создании тем, или выкладывании какой-либо информации проверьте в какой ветке форума вы находитесь! Не путайте Opencart и Opencart2. При несоблюдении данного условия выносится соответствующее наказание! И потом не говорите что вас НЕ ПРЕДУПРЕЖДАЛИ! По возможности используйте обменники mail, yandex, google, dropbox, rghost Дабы избежать просьб перезалить и проблем с рекламой!
Модераторы: ZiX
  1. Ed71

    Ed71 Постоялец

    Регистр.:
    6 янв 2015
    Сообщения:
    99
    Симпатии:
    21
    Здравствуйте. Помогите, пожалуйста, разобраться. Я загружаю товары с помощью модуля Автоматическая обработка прайс-листов. Количество товара у меня установлено 1. Также на сайте у меня стоит модуль табы с измененной кнопкой "купить", т.е. когда количество товара 0, то кнопка "купить" изменяется на "уточнить наличие". Сделано это таким образом:

    https://yadi.sk/d/Z2TjcwaEhgpx4

    Все работает, но стоит мне купить хотя бы один товар, как во вкладке рекомендуемые у всех товаров кнопка "купить" меняется на "уточнить наличие". Во вкладке новинки, в категориях, в поиске, в карточках товаров все отображается, как и должно. У купленного товара кнопка меняется на "уточнить наличие", у остальных так и остается "купить". Т.е. получается, что во вкладке рекомендуемые все добавляемые товары определяются в количестве 0, хотя в админке их количество = 1. Подскажите, пожалуйста, в чем может быть дело, никак не могу разобраться, всю голову сломал уже.
     
  2. bezzubtsev

    bezzubtsev

    Регистр.:
    14 май 2015
    Сообщения:
    230
    Симпатии:
    65
    Интересно вы прикрутили на "уточнить наличие" обратную связь от дедушки, молодец.
    Попробуйте в контроллерах и в модуле разграничить понятие "'quantity" по каждой вкладке, сделав дописку к параметру.
    В контроллере было
    Код:
      'quantity'  => $result['quantity'],
    Стало
    Код:
      'quantity-best'  => $result['quantity'],
    И в двух остальных точно также.

    В модуле было
    Код:
    <?php if ($product['quantity'] > 0) { ?>
    Стало
    Код:
    <?php if ($product['quantity-best'] > 0) { ?>
    Не гарантирую что сработает, но может быть получится. Если не получится, уточните, где именно у вас происходит клик по купить товар? Какие ещё модули рядом с табами работают?
    Какой JS скрипт работает по табам?
     
    Ed71 нравится это.
  3. Ed71

    Ed71 Постоялец

    Регистр.:
    6 янв 2015
    Сообщения:
    99
    Симпатии:
    21
    Спасибо за ответ. Я правильно понял, что во всех четырех вкладках в контроллере нужно было заменить
    'quantity' => $result['quantity'], на
    'quantity-best' => $result['quantity'], и в модуле точно также во всех четырех вкладках
    <?php if ($product['quantity'] > 0) { ?> на
    <?php if ($product['quantity-best'] > 0) { ?>? К сожалению, все осталось, как и было. Заменил в модуле условие, во вкладке рекомендуемые на
    <?php if ($product['quantity-best'] <= 0) { ?>
    все кнопки у товаров в ней с "уточнить наличие" поменялись на "купить". Откуда вообще это берется? Где происходит клик купить, Вы имеете в виду common.js или еще что? Рядом с табами работают: Intelligent Product Labels, галерея fotorama, owl карусель. По табам работает owl.carousel.js ну и tabs.js, наверное.
     
    Последнее редактирование: 6 июл 2015
  4. Ed71

    Ed71 Постоялец

    Регистр.:
    6 янв 2015
    Сообщения:
    99
    Симпатии:
    21
    Поменял в контроллере блоки местами: //Featured поместил под //Latest Products таким образом
    Код:
     //Latest Products
         
            $this->data['latest_products'] = array();
         
            $latest_results = $this->model_catalog_product->getLatestProducts($setting['limit']);
    
            foreach ($latest_results as $result) {
                if ($result['image']) {
    $results_img = $this->model_catalog_product->getProductImages($result['product_id']);
                    $dop_img = array();
                    foreach ($results_img as $result_img) {
                    if ($result_img['image']) {
                    $image_dop = $this->model_tool_image->resize($result_img['image'], $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
                    } else {
                    $image_dop = false;
                    }
                     $dop_img[] = $image_dop;
                    }
                    $image = $this->model_tool_image->resize($result['image'], $setting['image_width'], $setting['image_height']);
                } else {
                    $image = $this->model_tool_image->resize('no_image.jpg', $setting['image_width'], $setting['image_height']);
                }
                         
                if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
                    $price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')));
                } else {
                    $price = false;
                }
                     
                if ((float)$result['special']) {
                    $special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')));
                } else {
                    $special = false;
                }
             
                if ($this->config->get('config_review_status')) {
                    $rating = $result['rating'];
                } else {
                    $rating = false;
                }
             
                $mylabels = new Label($this->registry);
    
                $mylabels->labels = $config_labels;
                $mylabels->product_info = stripos($current_layout,'ControllerModuleFeatured') !== false ||
                                          stripos($current_layout,'ControllerModuleFakelatest') !== false ||
                                          stripos($current_layout,'ControllerModuleFakemostviewed') !== false ||
                                          stripos($current_layout,'ControllerModuleFakebestseller')!== false ||
                                          stripos($current_layout,'ControllerModuleBookoftheweek')!== false ||
                                          stripos($current_layout,'ControllerModuledealoftheday')!== false ||
                                          stripos($current_layout,'ControllerModulePreorders')!== false ? $product_info : $result;
                $mylabels->current_layout = $current_layout;
                $mylabels->current_layout_position = $setting['position'];
                $mylabels->products_featured = $products_featured;
                $mylabels->bestsellers = $bestsellers;
                $labels = $mylabels->RenderLabels();
                                     
                $this->data['latest_products'][] = array(
                                    'quantity'    => $result['quantity'],
                                    'labels' => $labels,
                    'product_id' => $result['product_id'],
                                    'dop_img' => $dop_img,
                    'thumb'        => $image,
                    'name'         => $result['name'],
                    'price'        => $price,
                    'special'      => $special,
                    'saving'     => ((float)$result['price'] ? round((($result['price'] - $result['special'])/$result['price'])*100, 0) : 0),
                    'rating'     => $rating,
                    'reviews'    => sprintf($this->language->get('text_reviews'), (int)$result['reviews']),
                    'href'         => $this->url->link('product/product', 'product_id=' . $result['product_id']),
                );
            }
    
            //Featured
            $this->data['featured_products'] = array();
    
            $products = explode(',', $this->config->get('featured_product'));     
    
            if (empty($setting['limit'])) {
                $setting['limit'] = 5;
            }
         
            $products = array_slice($products, 0, (int)$setting['limit']);
         
            foreach ($products as $product_id) {
                $product_info = $this->model_catalog_product->getProduct($product_id);
             
                if ($product_info) {
    $results_img = $this->model_catalog_product->getProductImages($product_info['product_id']);
                    $dop_img = array();
                    foreach ($results_img as $result_img) {
                    if ($result_img['image']) {
                    $image_dop = $this->model_tool_image->resize($result_img['image'], $setting['image_width'], $setting['image_height']);
                    } else {
                    $image_dop = false;
                    }
                     $dop_img[] = $image_dop;
                    }
                    if ($product_info['image']) {
                        $image = $this->model_tool_image->resize($product_info['image'], $setting['image_width'], $setting['image_height']);
                    } else {
                        $image = $this->model_tool_image->resize('no_image.jpg', $setting['image_width'], $setting['image_height']);
                    }
    
                    if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
                        $price = $this->currency->format($this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax')));
                    } else {
                        $price = false;
                    }
                         
                    if ((float)$product_info['special']) {
                        $special = $this->currency->format($this->tax->calculate($product_info['special'], $product_info['tax_class_id'], $this->config->get('config_tax')));
                    } else {
                        $special = false;
                    }
                 
                    if ($this->config->get('config_review_status')) {
                        $rating = $product_info['rating'];
                    } else {
                        $rating = false;
                    }
                 
                    $mylabels = new Label($this->registry);
    
                $mylabels->labels = $config_labels;
                $mylabels->product_info = stripos($current_layout,'ControllerModuleFeatured') !== false ||
                                          stripos($current_layout,'ControllerModuleFakelatest') !== false ||
                                          stripos($current_layout,'ControllerModuleFakemostviewed') !== false ||
                                          stripos($current_layout,'ControllerModuleFakebestseller')!== false ||
                                          stripos($current_layout,'ControllerModuleBookoftheweek')!== false ||
                                          stripos($current_layout,'ControllerModuledealoftheday')!== false ||
                                          stripos($current_layout,'ControllerModulePreorders')!== false ? $product_info : $result;
                $mylabels->current_layout = $current_layout;
                $mylabels->current_layout_position = $setting['position'];
                $mylabels->products_featured = $products_featured;
                $mylabels->bestsellers = $bestsellers;
                $labels = $mylabels->RenderLabels();
                     
                    $this->data['featured_products'][] = array(
                        'quantity'    => $result['quantity'],
                        'labels' => $labels,
                        'product_id' => $product_info['product_id'],
                        'dop_img' => $dop_img,
                        'thumb'        => $image,
                        'name'         => $product_info['name'],
                        'price'        => $price,
                        'special'      => $special,
                        'saving'     => ((float)$product_info['price'] ? round((($product_info['price'] - $product_info['special'])/$product_info['price'])*100, 0) : 0),
                        'rating'     => $rating,
                        'reviews'    => sprintf($this->language->get('text_reviews'), (int)$product_info['reviews']),
                        'href'         => $this->url->link('product/product', 'product_id=' . $product_info['product_id']),
                    );
                }
            }
    
            }
    Теперь у всех рекомендуемых товаров кнопки "уточнить наличие" поменялись на "купить" в том числе и на проданных, количество которых равно 0. Помогите, пожалуйста, разобраться. Нужно сделать, чтобы в рекомендуемых было, как в новинках. Не могу никак понять откуда в рекомендуемых товарах берется переменная количества товаров и почему она некорректно работает.
     
  5. Ed71

    Ed71 Постоялец

    Регистр.:
    6 янв 2015
    Сообщения:
    99
    Симпатии:
    21
    В смысле?