В предыдущей статье я рассказывал о модернизации отображения наличия товара. Но, затем я столкнулся с такой проблемой, что, находясь в каталоге, клиент выбирает нужный ему товар, затем заходит в карточку товара и тут он видит, что его уже НЕТ в наличии! Получается очень не удобно. Нужно сделать так, чтобы в самой категории уже было видно какой товар есть, а какого нет в наличии.
Вывести эти данные в категории оказалось немного сложнее, поэтому я решил сразу сделать всё правильно, а не так как в предыдущей статье.
Для начала добавим в языковой файл наши три статуса.
Открываем:
/catalog/language/russian/product/product.php
Находим строки:
$_['text_stock'] = 'Наличие:'; $_['text_instock'] = 'В наличии'; |
и добавляем:
$_['text_outstock'] = 'Нет в наличии'; $_['text_minstock'] = 'Заканчивается'; |
Теперь, если вы захотите поменять надпись «Заканчивается», на «Остался последний!» вам надо всего лишь зайти в языковой файл и заменить нужную строку.
Основные изменения
Начинаем самый сложный процесс 😉 Работаем с контроллером категории.
Открываем для редактирования:
/catalog/controller/product/category.php
Почти в самом верху подтягиваем наш языковой файл.
После строк:
<?php class ControllerProductCategory extends Controller { public function index() { $this->language->load('product/category'); |
Вставляем:
$this->language->load('product/product'); |
Где-то в районе 240-250 строк после строки:
$rating = false; } |
вставляем этот код:
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'); } |
и последний штрих, где-то в районе 270 строки, между строк:
'thumb' => $image, 'name' => $result['name'], 'description' => utf8_truncate(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 200, ' …', true), 'price' => $price, |
вставляем строку:
'stock' => $stock, |
Вывод результата в списке товара
И непосредственно сам вывод нужной информации на сайте.
Открываем:
/catalog/view/theme/ваша_тема/template/product/category.tpl
Я предлагаю разместить информацию о наличии сразу под ценой.
Для этого, находим строки:
<div class="price"> <?php if (!$product['special']) { ?> <?php echo $product['price']; ?> <?php } else { ?> <span class="price-old"><?php echo $product['price']; ?></span> <span class="price-new"><?php echo $product['special']; ?></span> <?php } ?> <?php if ($product['tax']) { ?> <br /> <span class="price-tax"><?php echo $text_tax; ?> <?php echo $product['tax']; ?></span> <?php } ?> </div> |
и перед последним /div вставляем:
<br /><?php echo $product['stock']; ?> |
Делаем красиво
А тем кто хотят, чтоб это было ещё и красиво, можем назначить уникальный стиль для надписей.
В последнее наше изменение, вставляем не просто строчку
<br /><?php echo $product['stock']; ?> |
а вот такую:
<span class="stock"><br /><?php echo $product['stock']; ?></span> |
Заходим в:
/catalog/view/theme/ваша_тема/stylesheet/stylesheet.css
Находим строчку:
.product-list .price-tax { font-size: 12px; font-weight: normal; color: #BBBBBB; } |
и вставляем после неё:
.product-list .stock { font-size: 13px; font-weight: normal; } |
или подгоняем под свой стиль.
А вот чтоб надписи были разного цвета, возвращаемся в наш языковой файл:
/catalog/language/russian/product/product.php
и уже известные нам строки
$_['text_stock'] = 'Наличие:'; $_['text_instock'] = 'В наличии'; $_['text_outstock'] = 'Нет в наличии'; $_['text_minstock'] = 'Заканчивается'; |
меняем на что-то типа такого:
$_['text_stock'] = 'Наличие:'; $_['text_instock'] = '<font style="color: green;"><b>В наличии</b></font>'; $_['text_outstock'] = '<font style="color: #f00;">Нет в наличии</font>'; $_['text_minstock'] = '<font style="color: green;">Заканчивается</font>'; |
Поиск, Акции, и Производители…
По выше изложенной схеме исправим ещё парочку файлов, чтобы наличие товара отображалось и в поиске и в списке производителя и в акциях.
В каталоге /catalog/controller/product/
меняем файлы:
manufacturer.php — Список товаров определенного производителя
search.php — Поиск. Список найденных товаров
special.php — Специальные акционные предложения
изменения вносим такие же как в category.php (Основные изменения)
Думаю, разберетесь.
Вновь заходим в папку: /catalog/view/theme/ваша_тема/template/product/
И добавляем уже известную нам строку:
<span class="stock"><br /><?php echo $product['stock']; ?></span> |
в файлы:
manufacturer_info.tpl
search.tpl
special.tpl
P.S. У меня почему-то только в списке по производителю, выдаёт не результат, а наш полуготовый instock/outstock… попробую разобраться…
Спасибо, чуток переделал, но суть та, что надо!
Рад что статья стала полезной!
Спасибо за статью) всегда думала, как же осуществить такое удобство для посетителей сайта)))
Да, думаю посетители тоже будут благодарны! 😉
Здравствуйте, спасибо за статью, получилось сделать в категориях и поиске. А как сделать, для модулей? у меня на главной выведены модули. хиты. новинки рекомендуемые.
Ценная статья по действительно «наболевшей» теме. Спасибо! Сразу приступил к изменениям, старался делать все внимательно и точно по «рецепту». Но в итоге надписи «Есть в наличии», «Нет в наличии» появляются при загрузке страницы только на долю секунды. Может подскажите чтобы это могло быть? Версия 1.5.4.1.
Сергей, к сожалению по вашему вопросу не подскажу 🙁
Видимо версия 1.5.4.1 работает немного иначе и идет какой-то конфликт.
Странно что оно появляется и исчезает, посмотрите в других браузерах… Как там работает?
Проверил в Opera, Google Chrome, Mozilla Firefox, Yandex.Browser. К сожалению везде одинаковая ситуация. Пока продолжаю искать решение…
Все супер, получилось, а как сделать под заказ?
Спасибо!! Все четко и красиво))
Подскажите пожалуйста у меня не стандартный шаблон как мне сделать подобное
по инструкции пробовал но нечего не появилось
если можно напишите мне на почту