OpenCart не работает наличие на складе или выводим «в наличи» в Категории, а не только в карточке товара

В одном из своих магазинов на базе OpenCart я столкнулся с проблемой что не работает наличие на складе в карточке товара. А именно когда я, в админке, выставлял одно из значений:

  • Pre-Order
  • Out of Stock
  • 2-3 Days

Клиент, в карточке товара,  видел все ту же надпись «В наличии». Если у вас только эта проблема, то ее  устранить довольно просто. Дело в том что движок OpenCart сделан не совсем для рынка СНГ где все пишут «В наличии» даже на товар который давно не выпускается и в наличии его уже не будет уже никогда. Но поскольку продвжение сайта уже заказали, к примеру тут http://iq-adv.ru/ekaterinburg/prodvizhenie-sayta/ то и в наличии ставят «есть». Поэтому если в админке, в поле «Количество» стоит цифра отличная от нуля, то автоматически, для клиента выставляется что все есть. Ну это как бы логично. Поэтому чтобы пользоваться переключателем который есть в базе, вам надо всего лишь выставить количество — ноль.

Но в таком способе я вижу довольно много недостатков:

  1. Чтобы увидеть есть ли в наличии или нету клиенту надо зайти в карточку товара. Намного лучше клиенту, было бы сразу в категории видеть какие товары есть, а каких нету. Таким образом он будет выбирать из того что есть, а не проклацывать все товары
  2. Менеджерам постоянно приходиться менять и кол-во товара и переключатель, хотя на рынке СНГ за постоянным поддержанием реального наличия в магазине никто не следит.
  3. Изменять мы можем только на то что нам предложено, а именно только на надписи Pre-Order, Out of Stock, 2-3 Days. А неплохо было бы сделать эти надписи на русском и иметь возможность добавлять произвольные надписи к примеру «Заканчивается».

Итак, нам надо сделать простой способ оповещения о наличии товара как в карточке товара так и на стене категорий. Идеальным, на мой взгляд, решение будет такое —  если кол-во товара = 0 то высвечивается «Нет в наличии». При количестве от 1-3 показывает «Заканчивается». При кол-ве больше 3-х нашим лидам показывает надпись «Есть в наличии». Для этого нам понадобится немного поколдовать с php, но это не будет проблемой.

Для начала давайте поменяем в карточке товара. Для этого:

  1. Делаем резервную копию магазина
  2. Ищем файл /catalog/controller/product/product.php
  3. В этом файле найдите строки
    1
    2
    3
    4
    5
    6
    7
    
    if ($product_info['quantity'] <= 0) {
    				$this->data['stock'] = $product_info['stock_status'];
    			} elseif ($this->config->get('config_stock_display')) {
    				$this->data['stock'] = $product_info['quantity'];
    			} else {
    				$this->data['stock'] = $this->language->get('text_instock');
    			}
  4. и зазмените их на:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    if ($product_info['quantity'] <= 0) {
    				$this->data['stock'] = $this->language->get('text_outstock');
    			} 
    						elseif ($this->config->get('config_stock_display')) {
    				$this->data['stock'] = $product_info['quantity'];
     
    			}
    			elseif ($product_info['quantity'] >= 1 AND $product_info['quantity'] <= 3) {
    				$this->data['stock'] = $this->language->get('text_minstock');
    			} 
     
    			 else {
    				$this->data['stock'] = $this->language->get('text_instock');
    			}
  5. Сохраняем изменения и загружаем файл назад
  6. Теперь, в файлах языка, нам надо добавить два новых значения. Для этого ищем файл по пути /catalog/language/russian/product/product.php
  7. И вместо строчки:
    1
    
    $_['text_instock']      = 'В наличии';

    Вставляем:

    1
    2
    3
    
    $_['text_instock']      = '<font style="color: green;"><b>В наличии</b></font>';
    $_['text_outstock']     = '<font style="color: #f00;">Нет в наличии</font>';
    $_['text_minstock']     = '<font style="color: green;">Заканчивается</font>';
  8. Все! Все что нам осталось это загрузить измененный файл на хостинг и проверить как работает. Цвета вы можете изменить в соответствии с вашими желаниями.

С карточкой товара разобрались. Теперь нам надо сделать почти тоже самое, но теперь с категориями.

Вывод наличия товара в категориях в OpenCart

  1. Идем к файлу категорий по пути /catalog/controller/product/category.php
  2. После строчки
    1
    
    $this->language->load('product/category');

    вставляем
    $this->language->load(‘product/product’);

  3. После строчки
    1
    2
    
    $rating = false;
    }

    Вставляем

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    if ($result['quantity'] <= 0) {
            $stock = $this->language->get('text_outstock');
    } elseif ($this->config->get('config_stock_display')) {
            $stock = $result['quantity'];
    } elseif ($result['quantity'] >= 1 AND $result['quantity'] <= 3) {
    	$stock = $this->language->get('text_minstock');
    } else {
    	$stock = $this->language->get('text_instock');
    }
  4. После строчек
    1
    2
    
    'description' => utf8_truncate(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 200, '&nbsp;&hellip;', true),
    'price'       => $price,

    Вставляем

    1
    
    'stock'       => $stock,

С этим этапом мы закончили. Теперь можем загрузить файл назад, и все что нам осталось это изменить шаблон сайта, чтобы вывести данные о наличии. Ниже я приведу пример для дефотного шаблона, но по аналогии вы сможете вывести в нужном месте в вашем шаблоне.

  1. Идем по пути
    /catalog/view/theme/ваша_тема/template/product/category.tpl
  2. Находим строчку:
    1
    2
    
    <span class="price-tax"><?php echo $text_tax; ?> <?php echo $product['tax']; ?></span>
      <?php } ?>
  3. И после нее вставляем
    1
    
    <br /><?php echo $product['stock']; ?>
  4. Загрузите файл и проверьте как все работает

Если вы все сделали правильно то у вас должно было выйти так как на картинке ниже

OpenCart-nalichie-v-kategoriyah

На этом все, но если у вас остались вопросы или пожелания пишите в комментариях, попробую вам помочь

загрузка...
6 комментариев

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *