Створення користувальницького методу доставки в OpenCart: частина 2

313

Від автора: у цій серії ми обговорюємо, як реалізувати в OpenCart методи доставки з користувацькими налаштуваннями. У першій частині ми включили і налаштували наш користувацький метод доставки, використовуючи форму конфігурації в back-end. Сьогодні ми реалізуємо файли, які потрібні OpenCart, щоб він міг виявити власний спосіб доставки та перерахувати його разом з іншими включеними способами доставки під час перевірки.

Я сподіваюся, що ви створили всі файли з першої частини цієї серії. А якщо ви ще не пройшли першу частину, то я б порадив зробити це, перш ніж продовжити. Крім того, я припускаю, що ви використовуєте останню версію OpenCart.
Погляд на налаштування файлу під front-end

Почнемо зі списку необхідних файлів:

catalog/language/english/shipping/custom.php: Це мовний файл, в якому ми будемо визначати мітки.

catalog/model/shipping/custom.php: Це файл моделі, який важливий, оскільки більша частина логіки розрахунку доставки йде тут.

Створення користувальницького методу доставки в OpenCart: частина 2

Інтернет-магазин на OpenCart!

Створити інтернет-магазин на самій популярної CMS OpenCart з нуля!

Приступити до створення

Це те, що стосується налаштування front-end.

Налаштування файлу

Почнемо з налаштування мовного файлу.

Створення мовного файлу

Створіть файл catalog/language/english/shipping/custom.php та вставте цей файл наступне вміст.

Я не думаю, що це вимагає яких-небудь пояснень, так що давайте рухатися далі!

Створення моделі файл

Створіть файл catalog/model/shipping/custom.php та вставте в нього наступне вміст

load->language(‘shipping/custom’);
$query = $this->db->query(“SELECT * FROM” . DB_PREFIX . “zone_to_geo_zone WHERE geo_zone_id = ‘” . (int)$this->config->get(‘custom_geo_zone_id’) . “‘ AND country_id = ‘” . (int)$address[‘country_id’] . “‘ AND (zone_id = ‘” . (int)$address[‘zone_id’] . “‘ OR zone_id = ‘0’)”);
if (!$this->config->get(‘custom_geo_zone_id’)) {
$status = true;
} elseif ($query->num_rows) {
$status = true;
} else {
$status = false;
}
$method_data = array();
if ($status) {
$quote_data = array();
$quote_data[‘custom’] = array(
‘code’ => ‘custom.custom’,
‘title’ => $this->language->get(‘text_description’),
‘cost’ => $this->config->get(‘custom_cost’),
‘tax_class_id’ => $this->config->get(‘custom_tax_class_id’),
‘text’ => $this->currency->format($this->tax->calculate($this->config->get(‘custom_cost’), $this->config->get(‘custom_tax_class_id’), $this->config->get(‘config_tax’)))
);
$method_data = array(
‘code’ => ‘custom’,
‘title’ => $this->language->get(‘text_title’),
‘quote’ => $quote_data,
‘sort_order’ => $this->config->get(‘custom_sort_order’),
‘error’ => false
);
}
return $method_data;
}
}

У відповідності з вимогами OpenCart ім’я класу має бути, ModelShippingCustom. Також є getQuote метод, який є обов’язковим для нашого методу доставки, і який буде обраний OpenCart.

Варто зауважити, що $address аргумент передається в getQuote методі, який є адресою доставки клієнта під час перевірки, і дозволяє нам вирішити, застосуємо поточний метод доставки для географічної зони, належить цією адресою. Це визначається наступним кодом.

$query = $this->db->query(“SELECT * FROM” . DB_PREFIX . “zone_to_geo_zone WHERE geo_zone_id = ‘” . (int)$this->config->get(‘custom_geo_zone_id’) . “‘ AND country_id = ‘” . (int)$address[‘country_id’] . “‘ AND (zone_id = ‘” . (int)$address[‘zone_id’] . “‘ OR zone_id = ‘0’)”);
if (!$this->config->get(‘custom_geo_zone_id’)) {
$status = true;
} elseif ($query->num_rows) {
$status = true;
} else {
$status = false;
}

Як можна побачити, ми використовуємо $this->config->get метод для завантаження значень змінних конфігурації типу «custom_cost», «custom_tax_class_id» і «custom_sort_order». Згадайте першу частину, в якій ми налаштували ці значення, використовуючи персоналізовану форму конфігурації!

Крім того, важливим фрагментом для попередження є значення text ключа в $quote_data масиві. Він обчислює і форматує загальну суму, яка буде стягуватися за наш метод доставки. Зокрема, він перевіряє, чи потрібно додати додатковий податок на «вартість» методу доставки. Згадайте налаштування податкового класу, які ми надали у нашій формі конфігурації, в якій ми вибрали Taxable Goods. Таким чином, він додасть додатковий податок на загальну суму доставки!

Ми спробували спростити нашу модельну частина, але ви можете робити всі обчислення в цьому файлі у відповідності з вашими інтерфейси API API доставки, якщо такі є. Це те, що стосується частини моделі.
Демонстрація під front-end

Під front-end додайте кілька продуктів в кошик і почніть процес оформлення замовлення. Крок 4: Delivery Method, що ви повинні побачити наш користувацький спосіб доставки, вказаний в наступному скріншоті.

Створення користувальницького методу доставки в OpenCart: частина 2

Він вказаний в заголовку «Custom Shipping Rate — $14.00». Ви можете бути здивовані тим, що, хоча ми встановили параметр Cost на 10,у списку він відображає 14. Як я згадував раніше, ми вас є відповідні Taxable Goods в поле Tax Class у формі конфігурації в back-end. Перейдіть в Localization > Taxes > Tax Classes. Ви побачите, що для цього податкового класу налаштований 20% ПДВ і 2 $ Eco Tax . Таким чином, він додає ще 4 долара до вартості! Звичайно, якщо ви встановите для Tax Class значення None, податок не буде застосовуватися взагалі!

Це була тема на сьогодні. Тепер ми успішно створили повноцінний інтерфейс метод доставки в OpenCart!

Висновок

Я сподіваюся, що вам сподобалася ця серія з двох частин, і ви дізналися щось корисне. І не забудьте поділитися своїми відгуками.

Створення користувальницького методу доставки в OpenCart: частина 2

Інтернет-магазин на OpenCart!

Створити інтернет-магазин на самій популярної CMS OpenCart з нуля!

Приступити до створення