sql >> データベース >  >> RDS >> Mysql

OpenCartでカスタム配送方法を作成する:パート2

    このシリーズでは、OpenCartでのカスタム配送方法モジュールの実装について説明します。最初の部分では、バックエンドの構成フォームを使用して、カスタム配送方法を有効にして構成しました。本日は、OpenCartがカスタム配送方法を検出し、チェックアウト時に他の有効な配送方法と一緒に一覧表示できるように、OpenCartに必要なファイルを実装します。

    このシリーズの最初の部分からすべてのファイルを作成したことを願っています。最初の部分をまだ読んでいない場合は、先に進む前にそれを読んでおくことをお勧めします。また、最新バージョンのOpenCartを使用していると思います。

    フロントエンドのファイル設定の概要

    フロントエンドで必要なファイルのリストから始めましょう。

    • カタログ/言語/英語/shipping/custom.php :これは、ラベルを定義する言語ファイルです。
    • カタログ/モデル/shipping/custom.php :これはモデルファイルであり、出荷計算ロジックのほとんどがここにあるため重要です。

    フロントエンドのセットアップに関する限り、これで終わりです。

    ファイルの設定

    言語ファイルの設定から始めましょう。

    言語ファイルを作成する

    ファイルを作成する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;
    }

    次に、配送方法が適用できる場合は、規則に従って必要な配列変数を準備します。

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

    ご覧のとおり、 $ this-> config-> getを使用しています 「custom_cost」、「custom_tax_class_id」、「custom_sort_order」などの構成変数の値をロードするメソッド。カスタム構成フォームを使用してこれらの値を構成した最初の部分を思い出してください!

    また、注意すべき重要なスニペットは、 textの値です。 $ quote_dataを入力します 配列。カスタム配送方法で請求される合計金額を計算してフォーマットします。具体的には、配送方法の「コスト」に追加の税金を追加する必要があるかどうかを確認します。 税クラスを思い出してください 課税対象商品を選択した構成フォームで提供した設定 。したがって、配送方法の合計金額に追加の税金が追加されます!

    モデル部分をシンプルに保つように努めましたが、配送方法APIがある場合は、このファイルですべての計算を行うことができます。モデルパーツに関する限り、これで終わりです。

    フロントエンドのデモ

    フロントエンドで、カートにいくつかの商品を追加し、チェックアウトプロセスを開始します。 ステップ4:配信方法 、次のスクリーンショットに示すように、カスタム配送方法が表示されるはずです。

    「カスタム配送料-$14.00」というタイトルで表示されます 。 コストを設定したにもかかわらず、驚かれるかもしれません。 10へのパラメータ 、 14を表示しています リストにあります。前述したように、課税対象商品を構成しました 税務クラス バックエンドの構成フォームのフィールド。

    ローカリゼーション>税金>税金クラスに移動します 、課税対象商品を編集します 。 20%の付加価値税が表示されます とフラット2$ エコ税 この税クラス用に構成されています。したがって、配送方法のコストにさらに4ドルが追加されます。もちろん、税クラスを設定した場合 なし 税金は一切かかりません!

    今日は以上です。これで、OpenCartで本格的なカスタム配送方法モジュールが正常に作成されました!


    1. MySQLビューの使用

    2. MicrosoftAccessでレポートヘッダーにロゴを追加する方法

    3. 列がnullでも空でもないAndroidSQLiteクエリ

    4. MySQL DATEDIFF()とTIMEDIFF():違いは何ですか?