Часто бывает, особенно в строительных магазинах, что цена идет за квадратный метр, а в упаковке, например ламината, находится более одного квадратного метра. Покупатель будет заказывать определенное количество упаковок, а Opencart должен автоматически подсчитывать сколько это в квадратных метрах.

Например, нам надо купить ламинат на комнату 20 кв.м.

Первое что бы делаем это находим интернет магазин, выбираем товар и ставим в количество упаковок. Но без автоматического подсчета неудобно совершать покупки. Из-за этого надо вручную считать сколько заказывать.

В этой доработке мы сделаем автоматический подсчет упаковок товара.

План работ

  1. Добавление в админку поле ввода количества квадратных метров в упаковке. (Например 1,56 кв.м. в пачке ламината)
  2. Добавляем в карточке товара + и - для увеличения или уменьшения количества упаковок в кв.м.
  3. Добавляем код для правильного отображения в категории.

Добавляем в админку поле ввода.

Открываем файл admin/catalog/view/template/catalog/product_form.tpl

ищем строки:

после них вставляем:

Эти строки удаляем:

Этим кодом мы добавили поле ввода количества м2 для товара в админке, путем удаления ненужного mpn и присвоения этой переменной нашему полю.

Ввод количества квадратных метров в админке

Также добавим поле для ввода количества штук в упаковке (для информации покупателю). Для этого после строк выше добавляем:

И удаляем код для ввода isbn, который практически никому не нужен:

Далее открываем файл 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 (которое учитывается при добавлении) для реального количества упаковок.

В этом файле ищем код:

 

Меняем его на:

-
+

Этим кодом мы добавили +/- и правильное отображение количества квадратных метров и упаковок. Отображение кнопок можно менять под свою тему или на свое усмотрение как будет удобно. В этом же файле находим:

И перед этой строкой вставляем скрипты для оживления кнопок + и -

 

После этого у нас все хорошо отображается и в корзину добавляется в упаковках. Возле вывода цены, можно писать что это за 1 кв.м.

Подсчет квадратных метров в товаре Opencart

Для вывода информации о количестве штук в упаковке добавьте в этом файле в удобном месте вывод

 Количество в упаковке  шт.

Правильное отображение цены за квадратный метр в категории

После всех изменений нам надо вывести цену за кв.м. в категории, для этого открываем файл 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 после всех изменений в коде магазина надо зайти в Модули Модификаторы и нажать на кнопку Очистить и Обновить справа вверху.

Демо работы: Подсчет квадратных метров


07.10.2015 17482
Новости из этой категории
11.09.2019 5068
В Opencart при копировании товара удаляет
Во втором Opencart замечен странный баг который вместо копирования товара в списке его удаляет. Что бы исправить необходимо открыть файлadmin/view/template/catalog/produc..
15.11.2018 17423
Как вывести любую информацию в любом месте в карточке товара
Приветствую тебя юный разработчик! Очень часто в заданиях или целых проектах у меня бывают похожие пункты. Очень популярный это вывод информационного блока в карточке тов..
29.09.2018 8222
Исправляем баг Opencart редирект с page=1 на страницу категории
В пагинации Opencart зарыто очень много багов. Например при перелистывании категории кнопками 1.2.3... у нас создаются дубли страниц, которые можно решить с помощью внедр..
11.02.2018 8005
Как задать разный порядок сортировки товара для каждой из категорий к которому он привязан
Приветствую! Недавно мне написал заказчик который попросил меня сделать достаточно интересную доработку. Суть ее в том что надо сделать порядок сортировки товара который ..
23.01.2018 9945
Пропадают заказы в Opencart - как вылечить?
Очень часто ко мне обращаются мои клиенты с просьбой разобраться почему у них пропадают заказы. То есть клиенты звонят и говорят что заказ сделали но никто не перезванива..
Вся информация, представленная на сайте, является демонстрационной и оставляя информацию о своих персональных данных, вы добровольно делаете их общедоступными.
Рекомендуем использовать обезличенные данные. Мы используем файлы cookie для вашего удобства пользования сайтом и повышения качества рекомендаций. Подробнее