Урок 37 Уточнить цену при нулевой стоимости товара Opencart

Всем привет.
Не редко в интернет магазине бывает такая ситуация, когда указать актуальную цену невозможно. Например, товар идет только под заказ или цена на товар меняется довольно часто. У таких товаров цену обычно ставят нулевой и указывают что товар может быть только под заказ. Для клиента цена в ниже нуля выглядит не особо красиво и в ряде случаев может привести к тому, что потенциальный клиент просто уйдет от Вас.
Лучшим решением данной проблемы будет вывод «заглушки», т.е. какой то надписи, например «Уточняйте цену». В идеале конечно делать интерактивное окно запроса уточнения цены, однако это не тема сегодняшней статьи.
Изменения необходимо будет делать в языковых файлах, контроллерах и темплейтах модулей, категорий, странице поиска, странице производителя, списке акционных товаров и непосредственно в карточке товара. Я рассмотрю на примере категорий и карточки товара. Остальные страницы делаются по аналогии с категориями.
Заменяем нулевую цену в категориях опенкарт на «Уточнить цену»
Прежде всего открываем контроллер категорий. В нем добавим языковую переменную, так как в случае мультиязычного магазина прописывать текст в темплейте не верно.
1 |
catalog/controller/product/category.php |
после
1 |
$data['text_limit'] = $this->language->get('text_limit'); |
Добавим
1 |
$data['text_nullpprice'] = $this->language->get('text_nullpprice'); |
Тут же добавим новую переменную, чтобы определять «чистую» цену. Находим
1 |
$price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']); |
И под ней добавляем
1 |
$pricenull = $result['price']; |
Далее ищем
1 |
'price' => $price, |
и сразу за нм добавляем
1 |
'pricenull' => $pricenull, |
Теперь добавим переменную в языковой файлах
1 |
catalog/language/ru-ru/product/category.php |
После
1 |
$_['text_limit'] = 'Показывать:'; |
Добавляем
1 |
$_['text_nullpprice'] = 'Уточняйте цену'; |
Если в вашем магазине несколько языков, сделайте изменения в каждом из них с соответствующим переводом
После переходим непосредственно к темплейту категорий по адресу
1 |
catalog/view/theme/default/template/product/category.tpl(category.twig) |
Находим примерно на 108 строке конструкцию
1 2 3 |
<?php if (!$product['special']) { ?> <?php echo $product['price']; ?> <?php } else { ?> |
и меняем ее на
1 2 3 4 5 6 7 |
<?php if (!$product['special']) { ?> <?php if ($product['pricenull'] > '0') { ?> <?php echo $product['price']; ?> <?php } else { ?> <?php echo $text_nullpprice; ?> <?php } ?> <?php } else { ?> |
Для версии опенкарт 3.х
Находим первое вхождение
1 |
{{ product.price }} |
И меняем на
1 2 3 4 5 |
{% if (product.pricenull > '0') %} {{ product.price }} {% else %} {{ product.text_nullpprice }} {% endif %} |
Заметьте, изменения делаем только для основной цены, так как нулевая цена не предусматривает скидок, это логично.
Сохраняем, обновляем модификаторы и если все сделано верно, то у товаров с нулевой ценой будет выведен текст, который Вы указали в языковом файле. Для модулей и типовых страниц, таких как поиск, производители порядок действий будет идентичным.
Заменяем нулевую цену в карточке опенкарт на «Уточнить цену»
Как и в случае с категориями, переходим в контроллер
1 |
catalog/controller/product/product.php |
и добавляем языковую переменную. После
1 |
$data['text_loading'] = $this->language->get('text_loading'); |
Добавляем
1 |
$data['text_nullpprice'] = $this->language->get('text_nullpprice'); |
Тут же находим
1 |
$data['price'] = $this->currency->format($this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']); |
И снизу добавляем
1 |
$data['pricenull'] = $product_info['price']; |
Далее ищем
1 |
$price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']); |
И так же снизу добавляем
1 |
$pricenull = $product_info['price']; |
И дальше ищем
1 |
'price' => $price, |
и ниже добавляем
1 |
'pricenull' => $pricenull, |
С контроллером закончили. Теперь необходимо ее прописать в языковом файле товара по адресу
1 |
catalog/language/ru-ru/product/product.php |
После
1 |
$_['text_year'] = 'год'; |
Добавляем
1 |
$_['text_nullpprice'] = 'Уточняйте цену'; |
Для других языков делаем то же самое.
Далее можно переходить к темплейту карточки товара
1 |
catalog/view/theme/default/template/product/product.tpl(product.twig) |
Здесь изменения будем делать как для самого товара, так и для рекомендуемых товаров. Находим
1 2 3 4 5 |
<?php if (!$special) { ?> <li> <h2><?php echo $price; ?></h2> </li> <?php } else { ?> |
И меняем на
1 2 3 4 5 |
<?php if (!$special) { ?> <li> <h2><?php if ($pricenull > '0') { ?><?php echo $price; ?><?php } else { ?><?php echo $text_nullpprice; ?><?php } ?></h2> </li> <?php } else { ?> |
Для версии 3.х
Находим
1 2 3 4 5 |
{% if not special %} <li> <h2>{{ price }}</h2> </li> {% else %} |
Меняем на
1 2 3 4 5 |
{% if not special %} <li> <h2>{% if (pricenull > '0') %}{{ price }}{% else %}{{ text_nullpprice }}{% endif %} </h2> </li> {% else %} |
Теперь добавим доработку для рекомендуемых. Находим
1 2 3 |
<?php if (!$product['special']) { ?> <?php echo $product['price']; ?> <?php } else { ?> |
И меняем на
1 2 3 4 5 6 7 |
<?php if (!$product['special']) { ?> <?php if (product['pricenull'] > '0') { ?> <?php echo product['price']; ?> <?php } else { ?> <?php echo $text_nullpprice; ?> <?php } ?> <?php } else { ?> |
Для версии опенкарт 3.х
Находим первое вхождение
1 |
{{ product.price }} |
И меняем на
1 2 3 4 5 |
{% if (product.pricenull > '0') %} {{ product.price }} {% else %} {{ product.text_nullpprice }} {% endif %} |
Сохраняем, обновляем модификаторы и проверяем результат. Если все сделано верно, вместо нулевой цены будет написано «Уточняйте цены».
Огромное спасибо за наконец-то рабочий рабочий способ (много лет искал), только в pricenull > ‘0’) забыли поставить $ — должно быть $pricenull > ‘0’)
Спасибо. Поправил.
Здравствуйте.
К сожалению я не программист, но имея подробную инструкцию мог бы повторить. Но в моей версии 3.0.3.2 текст в catalog/controller/product/category.php не совпадает с вашими рекомендациями. Далее уже не стал проверять.
А очень хочется убрать нолики.
Здравствуйте. Какой именно текст не совпадает?
Здравствуйте
Да там все не совпадает. Но вопрос уже не актуален. Сделали мне ребята. Спасибо.
Может подскажите как еще в самом товаре вывести?
В категориях отображается (Уточняйте цену), а вот в товаре нет!
Здравствуйте.
если речь про дефолтный шаб, то в контроллере перед
if ((float)$product_info['special']) {
добавьте
$data['pricenull'] = $product_info['price'];
А уже в самом шаблоне замените
< ?php echo $price; ?>
на
< ?php if ($pricenull > '0') { ?>
< ?php echo $price; ?>
< ?php } else { ?>
Уточнить цену
< ?php } ?>
Спасибо, работает!
У меня только без пробелов тут (<?php)