OpenCart не работает наличие на складе или выводим «в наличи» в Категории, а не только в карточке товара
|В одном из своих магазинов на базе OpenCart я столкнулся с проблемой что не работает наличие на складе в карточке товара. А именно когда я, в админке, выставлял одно из значений:
- Pre-Order
- Out of Stock
- 2-3 Days
Клиент, в карточке товара, видел все ту же надпись «В наличии». Если у вас только эта проблема, то ее устранить довольно просто. Дело в том что движок OpenCart сделан не совсем для рынка СНГ где все пишут «В наличии» даже на товар который давно не выпускается и в наличии его уже не будет уже никогда. Но поскольку продвжение сайта уже заказали, к примеру тут http://iq-adv.ru/ekaterinburg/prodvizhenie-sayta/ то и в наличии ставят «есть». Поэтому если в админке, в поле «Количество» стоит цифра отличная от нуля, то автоматически, для клиента выставляется что все есть. Ну это как бы логично. Поэтому чтобы пользоваться переключателем который есть в базе, вам надо всего лишь выставить количество — ноль.
Но в таком способе я вижу довольно много недостатков:
- Чтобы увидеть есть ли в наличии или нету клиенту надо зайти в карточку товара. Намного лучше клиенту, было бы сразу в категории видеть какие товары есть, а каких нету. Таким образом он будет выбирать из того что есть, а не проклацывать все товары
- Менеджерам постоянно приходиться менять и кол-во товара и переключатель, хотя на рынке СНГ за постоянным поддержанием реального наличия в магазине никто не следит.
- Изменять мы можем только на то что нам предложено, а именно только на надписи Pre-Order, Out of Stock, 2-3 Days. А неплохо было бы сделать эти надписи на русском и иметь возможность добавлять произвольные надписи к примеру «Заканчивается».
Итак, нам надо сделать простой способ оповещения о наличии товара как в карточке товара так и на стене категорий. Идеальным, на мой взгляд, решение будет такое — если кол-во товара = 0 то высвечивается «Нет в наличии». При количестве от 1-3 показывает «Заканчивается». При кол-ве больше 3-х нашим лидам показывает надпись «Есть в наличии». Для этого нам понадобится немного поколдовать с php, но это не будет проблемой.
Для начала давайте поменяем в карточке товара. Для этого:
- Делаем резервную копию магазина
- Ищем файл /catalog/controller/product/product.php
- В этом файле найдите строки
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'); }
- и зазмените их на:
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'); }
- Сохраняем изменения и загружаем файл назад
- Теперь, в файлах языка, нам надо добавить два новых значения. Для этого ищем файл по пути /catalog/language/russian/product/product.php
- И вместо строчки:
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>';
- Все! Все что нам осталось это загрузить измененный файл на хостинг и проверить как работает. Цвета вы можете изменить в соответствии с вашими желаниями.
С карточкой товара разобрались. Теперь нам надо сделать почти тоже самое, но теперь с категориями.
Вывод наличия товара в категориях в OpenCart
- Идем к файлу категорий по пути /catalog/controller/product/category.php
- После строчки
1
$this->language->load('product/category');
вставляем
$this->language->load(‘product/product’); - После строчки
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'); }
- После строчек
1 2
'description' => utf8_truncate(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 200, ' …', true), 'price' => $price,
Вставляем
1
'stock' => $stock,
С этим этапом мы закончили. Теперь можем загрузить файл назад, и все что нам осталось это изменить шаблон сайта, чтобы вывести данные о наличии. Ниже я приведу пример для дефотного шаблона, но по аналогии вы сможете вывести в нужном месте в вашем шаблоне.
- Идем по пути
/catalog/view/theme/ваша_тема/template/product/category.tpl - Находим строчку:
1 2
<span class="price-tax"><?php echo $text_tax; ?> <?php echo $product['tax']; ?></span> <?php } ?>
- И после нее вставляем
1
<br /><?php echo $product['stock']; ?>
- Загрузите файл и проверьте как все работает
Если вы все сделали правильно то у вас должно было выйти так как на картинке ниже
На этом все, но если у вас остались вопросы или пожелания пишите в комментариях, попробую вам помочь
У вас отключен JavaScript. Некоторые возможности системы не будут работать. Пожалуйста, включите JavaScript для получения доступа ко всем функциям.
Спасибо за помощь. Уже подумал, что модуль слетел….
Здравствуйте, подскажите пожалуйста, а есть такое же решение для opencart 2.1.0.2?
Спасибо.
День добрый, спасибо! А можно ли в самом продукте (в карточке товара) реализовать по аналогии? По вышеописанному всё работает. Но есть момент -к примеру, в категории теперь видно, что какой-то «Товар заканчивается», открываешь его карточку товара, а там «В наличии», может логичнее было бы и там отобразить «Заканчивается»?
Здравствуйте.
помогите, пожалуйста, сделала все, как написано, и получается следующее:
в карточке товара — товар в наличие подсвечивается зеленым, нет в наличии — никак не выделяется.
а в категории вообще ничего не появляется.
Возможно ошибка в данной строке:
$this->language->load(‘product/category’);
должно быть
$this->load->language(‘product/product’);
По крайней мере на opencart 2.1.
Для версии opencart 2.1.0.1 в карточке товара не отображается «Заканчивается» . А категории вообще не отображается статус товаров. Подскажите пожалуйста, может кто то разобрался как настроить для opencart 2.1
Добрый день! Все работает отлично каталоге, но такой вопрос — на главную также выводятся товара, как и у них также выводить эту информацию? В данный момент выводит такое предупреждение — Notice: Undefined index: stock in …./catalog/view/theme/fastor/template/new_elements/product.tpl on line 86
Добрый день! Работает все, кроме цвета «в наличии». в чем может быть дело?