Перейти к содержанию
  • В связи с блокировкой банка QIWI оплата через сайт не возможна.
    Для оплаты и получения дополнений просьба писать в личные сообщения
    Admin*у
    После оплаты Вам так же будет доступно скачивание дополнений и обновлений на данном форуме

Добавляем количество квадратных метров в упаковке и подсчет конечной цены, вводя цену за кв.м.


Рекомендуемые сообщения

calculate-square-metrs.jpg.6562631308c2c1fce8d9f97c488d580d.jpg

 

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


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

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

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

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

План работ

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

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

Открываем файл 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 и присвоения этой переменной нашему полю.


square-meters-in-admin.jpg.7a1c8d45bc541fd38a07f0e7a4225a4c.jpg

 

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

<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 кв.м.
calculate-square-metrs.jpg.6562631308c2c1fce8d9f97c488d580d.jpg

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

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

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...