Создание пользовательского метода доставки в OpenCart: часть 2

Создание пользовательского способа доставки в OpenCart

От автора: в этой серии мы обсуждаем, как реализовать в OpenCart методы доставки с пользовательскими настройками. В первой части мы включили и настроили наш пользовательский метод доставки, используя форму конфигурации в back-end. Сегодня мы реализуем файлы, которые требуются OpenCart, чтобы он мог обнаружить пользовательский способ доставки и перечислить его вместе с другими включенными способами доставки во время проверки.

Я надеюсь, что вы создали все файлы из первой части этой серии. А если вы еще не прошли первую часть, то я бы посоветовал сделать это, прежде чем продолжить. Кроме того, я предполагаю, что вы используете последнюю версию OpenCart.
Взгляд на настройку файла во front-end

Начнем со списка необходимых файлов:

catalog/language/english/shipping/custom.php: Это языковой файл, в котором мы будем определять метки.

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

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

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

Приступить к созданию

Это то, что касается настройки front-end.

Настройка файла

Начнем с настройки языкового файла.

Создание языкового файла

Создайте файл catalog/language/english/shipping/custom.php и вставьте в этот файл следующее содержимое.

<?php
// Text
$_['text_title'] = 'Custom Rate';
$_['text_description'] = 'Custom Shipping Rate';

Я не думаю, что это требует каких-либо объяснений, так что давайте двигаться дальше!

Создание файл модели

Создайте файл catalog/model/shipping/custom.php и вставьте в него следующее содержимое

<?php
class ModelShippingCustom extends Model {
  function getQuote($address) {
 $this->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, вы должны увидеть наш пользовательский способ доставки, указанный в следующем скриншоте.

Он указан в заголовке «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!

Заключение

Я надеюсь, что вам понравилась эта серия из двух частей, и вы узнали что-то полезное. И не забудьте поделиться своими отзывами.

Автор: Sajal Soni

Источник: http://code.tutsplus.com/

Редакция: Команда webformyself.

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

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

Приступить к созданию
Самые свежие новости IT и веб-разработки на нашем Telegram-канале

OpenCart: быстрый старт, первые результаты

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

Получить

Метки:

Похожие статьи:

Комментарии Вконтакте:

Комментарии Facebook:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree