категория: , Дорабатываем
✎ Опубликовано: 07.10.2015 ✎ Обновлено: 03.11.2015 ☕ Просмотров: 16255 ✉ Комментарии: 10
Часто бывает что цена идет за кв.м., а в упаковке, например ламината, находится более одного квадратного метра. В таком случае наш магазин должен автоматически все считать.
Часто бывает, особенно в строительных магазинах, что цена идет за квадратный метр, а в упаковке, например ламината, находится более одного квадратного метра. Покупатель будет заказывать определенное количество упаковок, а Opencart должен автоматически подсчитывать сколько это в квадратных метрах.
Например, нам надо купить ламинат на комнату 20 кв.м.
Первое что бы делаем это находим интернет магазин, выбираем товар и ставим в количество упаковок. Но без автоматического подсчета неудобно совершать покупки. Из-за этого надо вручную считать сколько заказывать.
В этой доработке мы сделаем автоматический подсчет упаковок товара.
Открываем файл admin/catalog/view/template/catalog/product_form.tpl
ищем строки:
<div class="form-group"> <label class="col-sm-2 control-label" for="input-price"><?php echo $entry_price; ?></label> <div class="col-sm-10"> <input type="text" name="price" value="<?php echo $price; ?>" placeholder="<?php echo $entry_price; ?>" id="input-price" class="form-control" /> </div> </div>
после них вставляем:
<div class="form-group"> <label class="col-sm-2 control-label" for="input-mpn">Количество м<sup>2</sup> в упаковке</label> <div class="col-sm-10"> <input type="text" name="mpn" value="<?php echo $mpn; ?>" id="input-mpn" class="form-control" /> </div> </div>
Эти строки удаляем:
<div class="form-group"> <label class="col-sm-2 control-label" for="input-mpn"><span data-toggle="tooltip" title="<?php echo $help_mpn; ?>"><?php echo $entry_mpn; ?></span></label> <div class="col-sm-10"> <input type="text" name="mpn" value="<?php echo $mpn; ?>" placeholder="<?php echo $entry_mpn; ?>" id="input-mpn" class="form-control" /> </div> </div>
Этим кодом мы добавили поле ввода количества м2 для товара в админке, путем удаления ненужного mpn и присвоения этой переменной нашему полю.
Также добавим поле для ввода количества штук в упаковке (для информации покупателю). Для этого после строк выше добавляем:
<div class="form-group"> <label class="col-sm-2 control-label" for="input-isbn"><span data-toggle="tooltip" >Количество шт. в упаковке</span></label> <div class="col-sm-10"> <input type="text" name="isbn" value="<?php echo $isbn; ?>" placeholder="<?php echo $entry_isbn; ?>" id="input-isbn" class="form-control" /> </div> </div>
И удаляем код для ввода isbn, который практически никому не нужен:
<div class="form-group"> <label class="col-sm-2 control-label" for="input-isbn"><span data-toggle="tooltip" title="<?php echo $help_isbn; ?>"><?php echo $entry_isbn; ?></span></label> <div class="col-sm-10"> <input type="text" name="isbn" value="<?php echo $isbn; ?>" placeholder="<?php echo $entry_isbn; ?>" id="input-isbn" class="form-control" /> </div> </div>
Далее открываем файл admin/model/catalog/product.php
Ищем в документе отрезок кода:
price = '" . (float)$data['price'] . "',
И меняем его на:
price = '" . (float)$data['price'] * ($data['mpn']?$data['mpn']:1) . "',
Этим мы добавили калькуляцию цены в зависимости от количества квадратов в упаковке. Если количество квадратов не заполнено, цена будет оригинальная.
Далее открываем файл admin/controller/catalog/product.php
Находим строки:
if (isset($this->request->post['price'])) { $data['price'] = $this->request->post['price']; } elseif (!empty($product_info)) { $data['price'] = $product_info['price']; } else { $data['price'] = ''; }
Меняем их на:
if (isset($this->request->post['price'])) { $data['price'] = $this->request->post['price']/($this->request->post['mpn']?$this->request->post['mpn']:1); } elseif (!empty($product_info)) { $data['price'] = $product_info['price'] / ($product_info['mpn']?$product_info['mpn']:1); } else { $data['price'] = ''; }
Этим мы добавили отображения цены в поле цена за один квадратный метр. По админке все готово.
При добавлении цены с количеством квадратов в упаковке идет автоматический подсчет и в базу пишется цена за упаковку то есть фактическая за конкретный товар.
Далее будем редактировать фронт магазина для правильного отображения цены и количества кв. м. в заказе.
Для этого открываем файл catalog/controller/product/product.php
Находим строки:
if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) { $data['price'] = $this->currency->format($this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax'))); } else { $data['price'] = false; }
Меняем их на:
if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) { $data['price'] = $this->currency->format($this->tax->calculate($product_info['price'] / ($product_info['mpn']?$product_info['mpn']:1), $product_info['tax_class_id'], $this->config->get('config_tax'))); } else { $data['price'] = false; }
Этим действием мы выводим цену за квадратный метр. Далее, после этих строк вставляем
$data['in_box'] = $product_info['mpn']; $data['count_in_box'] = $product_info['isbn'];
Этой переменной мы передаем количество квадратных метров в упаковке (in_box) и количество штук в упаковке (count_in_box) Далее открываем файл catalog/view/theme/default/template/product/product.tpl
И добавляем плюс и минус возле поля количество, где мы будем выводить его в квадратных метрах. Также добавим скрытое поле quantity (которое учитывается при добавлении) для реального количества упаковок.
В этом файле ищем код:
<input type="text" name="quantity" value="<?php echo $minimum; ?>" size="2" id="input-quantity" class="form-control" />
Меняем его на:
<div class="col-sm-12 form-group"> <div class="col-sm-3"> <span data-type="q_minus" class="control-in-de btn btn-primary btn-block">-</span> </div> <div class="col-sm-6"> <input type="text" name="quantity_in_box" value="<?php echo $minimum * ($in_box?$in_box:1); ?> кв.м. (<?php echo $minimum; ?> уп.)" size="2" id="input-quantity" class="form-control" /> <input type="hidden" name="quantity" value="<?php echo $minimum; ?>" /> </div> <div class="col-sm-3"> <span data-type="q_plus" class="control-in-de btn btn-primary btn-block">+</span> </div> </div>
Этим кодом мы добавили +/- и правильное отображение количества квадратных метров и упаковок. Отображение кнопок можно менять под свою тему или на свое усмотрение как будет удобно. В этом же файле находим:
<?php echo $footer; ?>
И перед этой строкой вставляем скрипты для оживления кнопок + и -
<script> $('.control-in-de').click(function(){ if($(this).data('type') == 'q_minus'){ if($('input[name="quantity"]').val() > '<?php echo $minimum; ?>'){ $('input[name="quantity"]').val(parseInt($('input[name="quantity"]').val())-1); } }else{ $('input[name="quantity"]').val(parseInt($('input[name="quantity"]').val())+1); } in_box = parseInt($('input[name="quantity"]').val())*<?php echo $in_box; ?>; $('input[name="quantity_in_box"]').val(in_box.toFixed(2) + ' кв.м. (' + $('input[name="quantity"]').val() + ' уп.)'); }); </script>
После этого у нас все хорошо отображается и в корзину добавляется в упаковках. Возле вывода цены, можно писать что это за 1 кв.м.
Для вывода информации о количестве штук в упаковке добавьте в этом файле в удобном месте вывод
Количество в упаковке <?php echo $count_in_box; ?> шт.
После всех изменений нам надо вывести цену за кв.м. в категории, для этого открываем файл catalog/controller/product/category.php
И находим строку:
$price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')));
Меняем ее на:
$price = $this->currency->format($this->tax->calculate($result['price'] / ($result['mpn']?$result['mpn']:1), $result['tax_class_id'], $this->config->get('config_tax')));
По аналогии делаем вывод цены за кв.м. В других модулях, такие как новинки, скидки, хиты продаж и т. д.
P.S. В Opencart 2 после всех изменений в коде магазина надо зайти в Модули — Модификаторы и нажать на кнопку Очистить и Обновить справа вверху.
Демо работы: Подсчет квадратных метров
Ну по аналогии уже надо дотачивать под каждые отдельные требования. Да, было бы и правда удобно что бы клиент вводил нужную ему площать. Например сделать поле "Нужное количество квадратов" и после ввода идет подсчет упаковок. Могу такое сделать но в свободное время, пока что занят.
Обзор нового Opencart 2.0 внешний вид, функциональность и код - все это было пощупано
Описание поле цена в Opencart, настройка
Количество это показатель физического наличия товара на вашем складе. Данное поле важно, в случае если вы ведете учет в интернет магазине
Читая информацию о рекламе в facebook я нашел кое что интересное
Чистый и валидный HTML и CSS код, Хорошие показатели Google Page Speed, Более 20 модулей в комплекте, Профессиональная техническая поддержка - это только часть того что есть в шаблоне
Исправляем странный баг в Opencart в удаляется товар при копировании. Этот баг присутствует в google chrome
Также в статье хочу выразить благодарность не только Виталию а и другим крутым авторам дополнений с кем приходилось иметь дело
Чтобы принимать Биткоин и Лайткоин в OpenCart, вам не нужно заполнять утомительные документы, проходить проверку и ждать несколько дней. Установите бесплатный модуль и просто введите адрес своего Биткоин и/или Лайткоин кошелька. Тогда все входящие платежи
Монобанк - прогрессивный банк без отделений в котором дают кредитные карточки с хорошим грейс периодом а также возможностью заработать открыв в нем депозит. Именно о нем и пойдет речь
Мы знаем что поисковые роботы любят текст на страницах. Однако публикуя тексты помните предназначена ли эта страница для такого текста
Небольшой пример как можно сделать автоматически содержание описания со скролом при клике на заголовок
Обзор платежного шлюза fondy который позволяет сделать онлайн оплату на сайте за любые товары или услуги
Как оптимизировать сайт для google page speed - обзор основного функционала сервиса от гугл для проверки скорости загрузки страницы
Для того что бы вывести кастомную информацию не надо много кода. Достаточно применить правильный подход и пару строк кода. Читаем в статье.
Как мне "посчастливилось" пощупать UMI CMS особенно со стороны переноса данных и почему меня до сих пор тошнит при слове UMI
В этом обзоре будут выявлены все плюсы и минусы каждого фильтра. Всего в обзоре будет 7 фильтров который продаются и развиваются. По завершению будет дана рекомендация какой же выбрать
Коллеги, давайте предоставлять хороший сервис и поднимать планку качества. Небольшая история как я обращался к разным разработчикам