Несколько единиц измерения товаров Opencart (OcStore)
- Подробности
- Категория: Opencart (OCstore)
- Обновлено 30.03.2019
Изначально Opencart заточен только для работы со штучными товарами. Но магазины часто продают мерный товар. Например, керамическую плитку. Базовая плита продается с ценой за квадратный метр, а бордюры с ценой за штуку. Как сделать несколько единиц измерения товаров в Opencart? Для этого нужно у каждого товара прописать его единицу измерения: шт, м2, м.п. и тому подобное. Тогда цена будет выводиться так:
1500р./м2
200р./шт
и так далее.
При этом нужно помнить, что мерный товар обычно имеет дробное количество, например 5.048 м2
Как сделать дробное количество товара описано в этой заметке.
Теперь по порядку. Если у вас на сайте установлены модификаторы, например Simple, то после внесения изменений в скрипты не забывайте обновлять модификаторы в админке. Иначе не увидите внесенных изменений.
- Для хранения единицы измерения товара можно использовать любое неиспользуемое поле в таблице oc_product, например ean. Но можно завести свое поле, например edizm
Мы, для удобства, будем использовать поле ean
Для штучных товаров пишем в это поле шт
Для мерных товаров пишем м2
Через админку это сделать не составит труда. - Добавляем поле ean в контроллерах Товар, Категория, модули с товарами. И затем добавляем ean к цене в соответствующих шаблонах. Смотрим на результат.
- Добавим ean к товарам в админке:
файл /system/library/cart.php
в строке 247 добавим
'ean' => $product_query->row['ean'],
.......
файл /catalog/controller/api/cart.php
в строке 196 добавим
'ean' => $product['ean'],
........
файл /admin/model/sale/order.php
функция getOrderProducts($order_id) должна выглядеть так
public function getOrderProducts($order_id) {
$query = $this->db->query("SELECT op.*, p.ean FROM " . DB_PREFIX . "order_product op JOIN " . DB_PREFIX . "product p USING(product_id) WHERE order_id = '" . (int)$order_id . "'");
return $query->rows;
}
файл /admin/controller/sale/order.php
строка 534
'name' => $product['name'],
'model' => $product['model'],
'ean' => $product['ean'],
строка 996
'name' => $product['name'],
'model' => $product['model'],
'ean' => $product['ean'],
строка 1703
'name' => $product['name'],
'model' => $product['model'],
'ean' => $product['ean'],
Добавляем ean в шаблонах
файл /admin/view/template/sale/order_form.tpl
строка 246
<td class="text-right">Ед.Изм.</td>
строка 275
<td class="text-right"><?php echo $order_product['ean']; ?></td>
строка 1112
html += ' <td class="text-right">' + product['price'] + '</td>';
html += ' <td class="text-right">' + product['ean'] + '</td>';
html += ' <td class="text-right">' + product['total'] + '</td>';
строка 1211
html += ' <td class="text-right" colspan="5">' + total['title'] + ':</td>';
файл /admin/view/template/sale/order_info.tpl
строка 152
<td class="text-right"><?php echo $column_quantity; ?></td>
<td class="text-right">Ед.Изм.</td>
<td class="text-right"><?php echo $column_price; ?></td>
строка 172
<td class="text-right"><?php echo $product['quantity']; ?></td>
<td class="text-right"><?php echo $product['ean']; ?></td>
<td class="text-right"><?php echo $product['price']; ?></td>
строка 189
<td colspan="5" class="text-right"><?php echo $total['title']; ?></td>
Обновляем модификаторы в админке.
Теперь можно проверить редактирование заказа в админке. Открываем на изменение тестовый заказ. Переходим на вторую вкладку изменения товаров. Если сразу появляется ошибка Ajax, то в отчете видно, в какой контроллер не поступает ean. Если ошибки нет, то меняем количество товаров, добавляем товары или удаляем и сохраняем изменения. Ошибок не должно быть. - Если хотим, чтобы в корзине выводились единицы измерения, то редактируем файлы:
файл /catalog/controller/checkout/cart.php
строка 159
'model' => $product['model'],
'ean' => $product['ean'],
'option' => $option_data,
файл /catalog/view/theme/default/template/checkout/cart.tpl
строка 44
<td class="text-left"><?php echo $column_model; ?></td>
<td class="text-left">Ед.изм.</td>
строка 75
<td class="text-left"><?php echo $product['model']; ?></td>
<td class="text-left"><?php echo $product['ean']; ?></td>
строка 82
<td class="text-right"><?php echo $product['price'] . '/' . $product['ean']; ?></td>
<td class="text-right"><?php echo $product['total']; ?></td> - Добавляем Единицы измерения товаров в письма покупателю и админу:
файл /catalog/model/checkout/order.php
строка 388
всю строку
$order_product_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_product WHERE order_id = '" . (int)$order_id . "'");
меняем на это
$order_product_query = $this->db->query("SELECT op.*,p.ean FROM " . DB_PREFIX . "order_product op JOIN " . DB_PREFIX . "product p USING(product_id) WHERE order_id = '" . (int)$order_id . "'");
строка 567
'name' => $product['name'],
'model' => $product['model'],
'ean' => $product['ean'],
.....
файл /catalog/view/theme/default/template/mail/order.tpl
ниже строки 76 добавляем
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; background-color: #EFEFEF; font-weight: bold; text-align: right; padding: 7px; color: #222222;">Ед.Изм.</td>
ниже строки 91 добавляем
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: right; padding: 7px;"><?php echo $product['quantity']; ?></td>
строка 100 ниже добавляем
<td style="font-size: 12px; border-right: 1px solid #DDDDDD; border-bottom: 1px solid #DDDDDD; text-align: left; padding: 7px;"></td>
в строке 111 меняем colspan="4" на colspan="5"
Обновляем модификаторы в админке.
Делаем тестовый заказ. Смотрим результат.