Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tạo phương thức vận chuyển tùy chỉnh trong OpenCart:Phần thứ hai

Trong loạt bài này, chúng ta sẽ thảo luận về việc triển khai mô-đun phương thức vận chuyển tùy chỉnh trong OpenCart. Trong phần đầu tiên, chúng tôi đã bật và định cấu hình phương thức vận chuyển tùy chỉnh của mình bằng cách sử dụng biểu mẫu cấu hình trong back-end. Hôm nay, chúng tôi sẽ triển khai các tệp mà OpenCart yêu cầu để nó có thể phát hiện phương thức vận chuyển tùy chỉnh và liệt kê nó cùng với các phương thức vận chuyển được kích hoạt khác trong quá trình thanh toán.

Tôi hy vọng rằng bạn đã tạo tất cả các tệp từ phần đầu tiên của loạt bài này. Nếu bạn chưa xem qua phần đầu tiên, tôi khuyên bạn nên xem qua phần đó trước khi tiếp tục. Ngoài ra, tôi giả sử rằng bạn đang sử dụng phiên bản OpenCart mới nhất.

Xem qua Thiết lập tệp ở Giao diện người dùng

Hãy bắt đầu với danh sách các tệp được yêu cầu trong giao diện người dùng.

  • catalog/language/english/shipping/custom.php :Đó là một tệp ngôn ngữ mà chúng tôi sẽ xác định các nhãn.
  • catalog/model/shipping/custom.php :Đó là một tệp mô hình, rất quan trọng vì hầu hết logic tính toán vận chuyển đều có ở đây.

Vì vậy, đó là nó liên quan đến thiết lập giao diện người dùng.

Thiết lập tệp

Hãy bắt đầu với thiết lập tệp ngôn ngữ.

Tạo tệp ngôn ngữ

Tạo tệp catalog/language/english/shipping/custom.php và dán các nội dung sau vào tệp đó.

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

Tôi không nghĩ rằng nó cần bất kỳ lời giải thích nào, vì vậy hãy tiếp tục!

Tạo tệp mô hình

Tạo tệp catalog/model/shipping/custom.php và dán các nội dung sau vào tệp đó.

<?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;
  }
}

Theo quy ước OpenCart, tên lớp phải là ModelShippingCustom và có một getQuote phương thức bắt buộc để phương thức vận chuyển của chúng tôi được OpenCart chọn.

Bạn sẽ thấy rằng $address đối số được chuyển vào getQuote phương thức, là địa chỉ giao hàng của khách hàng trong quá trình thanh toán và nó cho phép chúng tôi quyết định xem phương thức giao hàng hiện tại có thể áp dụng cho khu vực địa lý thuộc địa chỉ đó hay không. Nó được quyết định bởi đoạn mã sau.

$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;
}

Tiếp theo, nếu phương thức vận chuyển có thể áp dụng, chúng tôi chuẩn bị các biến mảng bắt buộc theo quy ước.

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
  );
}

Như bạn có thể thấy, chúng tôi đang sử dụng $this->config->get để tải các giá trị cho các biến cấu hình như "custom_cost", "custom_tax_class_id" và "custom_sort_order". Nhớ lại phần đầu tiên, trong đó chúng ta đã định cấu hình các giá trị này bằng biểu mẫu cấu hình tùy chỉnh!

Ngoài ra, một đoạn mã quan trọng cần lưu ý là giá trị của text nhập $quote_data mảng. Nó tính toán và định dạng tổng số tiền sẽ được tính cho phương thức vận chuyển tùy chỉnh của chúng tôi. Cụ thể, nó kiểm tra xem có cần thêm bất kỳ khoản thuế bổ sung nào vào "chi phí" của phương thức vận chuyển hay không. Nhắc lại Loại thuế cài đặt chúng tôi đã cung cấp trong biểu mẫu cấu hình của mình, trong đó chúng tôi đã chọn Hàng hóa chịu thuế . Do đó, nó sẽ thêm một khoản thuế bổ sung vào tổng số tiền của phương thức vận chuyển!

Chúng tôi đã cố gắng giữ cho phần mô hình của mình đơn giản, nhưng bạn có thể thực hiện tất cả các phép tính trong tệp này theo API phương thức vận chuyển của bạn nếu có. Vì vậy, đó là liên quan đến phần mô hình.

Bản trình diễn trong Giao diện người dùng

Trong giao diện người dùng, hãy thêm một vài sản phẩm vào giỏ hàng và bắt đầu quá trình thanh toán. Trong Bước 4:Phương thức phân phối , bạn sẽ có thể thấy phương thức vận chuyển tùy chỉnh của chúng tôi được liệt kê như thể hiện trong ảnh chụp màn hình sau.

Nó được liệt kê với tiêu đề "Phí vận chuyển tùy chỉnh - $ 14,00" . Bạn có thể ngạc nhiên rằng mặc dù chúng tôi đã định cấu hình Chi phí tham số thành 10 , nó đang hiển thị 14 trong danh sách. Như tôi đã đề cập trước đó, chúng tôi đã định cấu hình Hàng hóa chịu thuế trong Loại thuế trong biểu mẫu cấu hình trong back-end.

Điều hướng đến Bản địa hóa> Thuế> Loại thuế và chỉnh sửa Hàng hóa chịu thuế . Bạn sẽ thấy rằng 20% VAT và một căn hộ 2 $ Thuế sinh thái được định cấu hình cho loại thuế này. Do đó, nó làm tăng thêm $ 4 vào chi phí của phương thức vận chuyển! Tất nhiên, nếu bạn đặt Loại thuế thành Không, hoàn toàn không áp dụng thuế!

Vì vậy, đó là nó cho ngày hôm nay. Hiện chúng tôi đã tạo thành công mô-đun phương thức vận chuyển tùy chỉnh hoàn chỉnh trong OpenCart!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách hạn chế kết quả trong MySQL, PostgreSQL và SQLite

  2. Cách trả lại vị trí của đối số trong danh sách đối số trong MySQL

  3. Nhiều thứ hạng trong một bảng

  4. Cách tính số người dùng hoạt động hàng ngày (DAU) trong MySQL

  5. Làm cách nào để lấy tên tất cả các cột cho tất cả các bảng trong MySQL?