Commerce

Commerceモジュール

Docmmerce 2.x ドキュメント

https://docs.drupalcommerce.org/commerce2

インストール

https://docs.drupalcommerce.org/commerce2/developer-guide/install-update/installation

 

Commerceの機能拡張モジュールをインストール

composer require 'drupal/commerce_shipping:^2.0'

composer require 'drupal/commerce_recurring:^1.0'

Swift Mailer module: composer require drupal/swiftmailer

Mail Systemの設定 /admin/config/system/mailsystem

Swift Mailerの設定 admin/config/swiftmailer/transport

 

メンテナンス、アップデイトなど

Drupal Commerceと関連モジュールの更新: composer update --with-dependencies "drupal/commerce*"

Drupal Commerceだけの更新: composer update --with-dependencies drupal/commerce drupal/commerce_price drupal/commerce_product drupal/commerce_order drupal/commerce_payment drupal/commerce_payment_example drupal/commerce_checkout drupal/commerce_tax drupal/commerce_cart drupal/commerce_log drupal/commerce_store drupal/commerce_promotion drupal/commerce_number_pattern

もしくは、 composer update drupal/commerce --with-dependencies

サイト全体(Drupal Core、Commerceも含めた拡張モジュールなどすべて): composer update

もし、アップデイトで失敗したら、

composer why-not

composer remove   composer require

composer.lock   composer install

composer clear-cache

composer self-update

Commerceの削除は composer remove drupal/commerce

パッチの適用方法https://docs.drupalcommerce.org/commerce2/developer-guide/install-update/patching

 

Demoサイト

An examples module for Commerce 2.x. Provides some usually defaults and a sample migration.  https://github.com/mglaman/commerce_examples

 

 

Commerceの初期設定

環境:Drupal 8.7.8  Commerce 8.x-2.14

最初の設定

ストアの設定

1)通貨の設定

通貨(日本の円)を追加 admin/commerce/config/currencies

 

2)ストアの作成

admin/commerce/config/stores ストアを追加  ストア名称 デフォルト通貨 請求サポート国 TAX設定(税込み/defaultは税抜き) URLエイリアス

デフォルトのストアを変更

 

3)プロファイルの設定

admin/config/people/profile-types  顧客の編集 Tax Mumberや住所などを修正

 

4)マシンの状態(State Machine) 

コード指向のワークフロー機能がYML形式でフォーマットされている

 

5)インライン エンティティ フォーム

Inline Entity Formを使っています  https://www.drupal.org/project/inline_entity_form 

 

6)条件(Conditions)

注文(orders)では3つのカテゴリーで条件があり、プロモーションと支払いゲートウェイで以下の条件を構成されています。

・Customer
  Customer role
  Customer email
  Billing address

・Order
  Current order total
  Order currency
  Selected payment gateway (available for Promotions only)
  Store
  Order type

・Products
  Order contains specific products
  Order contains product categories
  Order contains product types
  Order contains product variation types
  Total discounted product quantity (available for Promotions only)

さらに、注文アイテム(order item)には以下の条件で設定されています。

Specific products
Product categories
Product types
Product variation types

 

7)リゾルバーを理解する

Drupal Commerceでのリゾルバーとは、複雑な質問に対する答えを提供するサービスです。たとえば、「この製品の価格は?」「注文からチェックアウトまでの工程は?」などです。

価格のリゾルバ: たとえば、ホーム-> MyProduct->Variations の価格など

お店のリゾルバ: たとえば、 お店(store)のDefaut設定、デフォルトは1つのお店だけです。もし、マルチストアのサイト(複数のお店があるモールのようなサイト)ではStoreResolverをカスタマイズする必要があります。詳しくは https://docs.drupalcommerce.org/commerce2/developer-guide/stores/resolve-current-store

チェックフローのリゾルバー: デフォルトはシングルチェックアウトフローだけですが、複数のチェックアウトフローを設定できます。 admin/commerce/config/order-types で checkout flow をDefaultに設定します。

その他のリゾルバー: Country ロケール 注文タイプ タックスレート

リゾルバーの構造: 特別なリゾルバーをChain resolverと言います mystore/web/modules/contrib/commerce/src/Resolver

サービスタグ: すべてのリゾルバーはサービスとなり、Chain resolverはサービスコレクターとよばれます。サービスタグの詳細は https://www.drupal.org/docs/8/api/services-and-dependency-injection

サービスタグのリゾルバーとサービスタグ

CheckoutFlow commerce_checkout.checkout_flow_resolver
Country    commerce.country_resolver
Locale     commerce.locale_resolver
OrderType   commerce_order.order_type_resolver
Price      commerce_price.price_resolver
Store     commerce_store.store_resolver
TaxRate    commerce_tax.tax_rate_resolver

 

備考: Apply a VAT rate on a product with Drupal Commerce 2 https://www.flocondetoile.fr/blog/apply-vat-rate-product-drupal-commerce-2

Working with the Drupal Commerce 2 checkout flows  https://www.flocondetoile.fr/blog/working-drupal-commerce-2-checkout-flows

Implementing a Checkout Flow resolver in Drupal Commerce 2.0  https://glamanate.com/blog/implementing-checkout-flow-resolver-drupal-commerce-20

 

8)通貨

参考: Commerce 2.x Stories - Internationalization https://drupalcommerce.org/blog/15916/commerce-2x-stories-internationalization  Internationalization Library https://github.com/commerceguys/intl

通貨、例えば日本の円を追加 admin/commerce/config/currencies

 

9)データベースのモデリング

 Drupal Commerce 2.x のモデリング図 https://www.dx-experts.nl/blog/2017/commerce-2-entity-relations-including-shipping

 

10)価格のフォーマット

価格の表示形式は複数あり、表示はTwigで行います。フィールド形式は、プレーン、デフォルト、計算済み価格(たとえば、キャンペーンなどで調整された場合)

 

製品の設定

製品と製品のタイプ

Tシャツ 製品タイプ
サイズ  製品の属性 
色    製品の属性
それぞれのTシャツの製品タイプには、色とサイズのバリエーションがあります。

製品 TシャツA サイズ Large  色 グリーン

製品 TシャツA  サイズ Medium  色 ブルー.......

製品のバリエーションと製品バリエーションのタイプ

 

製品の属性と製品属性の値

 

製品SKU: SKU(Stock Keeping Unit) 在庫管理を行う場合の単位。 アイテムは商品の種類を指すが、SKUは同じ商品でもパッケージの違いや値段の違いなど、アイテムより小さい単位で分類される。 商品の最小識別単位。

SKU BEST PRACTICES FOR ONLINE SHOPPING SITES: http://andrewbrettwatson.com/index.php/help/187-sku-best-practices-for-online-shopping-sites

 

製品情報の構造

 

 

 

製品の登録

 

受注

受注の作成

受注を参照

受注管理

受注ワークフロー

受注プロセス、検証など

受注の領収書、ストアからの通知Emailなど

 

支払い

支払い認証の登録許可

認証の無効

認証のキャプチャー(確認)

支払いの返金(Refund)

支払いの管理

 

プロモーション

 

 

 

 

エラーが起きた場合

Drupal 8のコアを更新した際に、エラーが起こる:

PHP Fatal error: Interface 'CommerceGuys\\Addressing\\AddressInterface' not found.....

以下のサイトを参考に:

Composerでモジュールを削除、入れ替えする

composer remove commerceguys/addressing

composer require drupal/address

もしくは、addreessモジュールを削除して、入れ替える

composer require 'drupal/address:^1.4'

 

Commerce 2.0 TaxTypes

SwissVat.php を参考にしました。

   .../web/modules/contrib/commerce/modules/tax/src/Plugin/Commerce/TaxType/JapanVat.php

 

<?php

namespace Drupal\commerce_tax\Plugin\Commerce\TaxType;

use Drupal\commerce_tax\TaxZone;
use Drupal\Core\Form\FormStateInterface;


class JapanVat extends LocalTaxTypeBase {

  
  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
    $form = parent::buildConfigurationForm($form, $form_state);
    $form['rates'] = $this->buildRateSummary();
    // Replace the phrase "tax rates" with "VAT rates" to be more precise.
    $form['rates']['#markup'] = $this->t('The following VAT rates are provided:');

    return $form;
  }

  
  public function buildZones() {
    $zones = [];
    $zones['jp'] = new TaxZone([
      'id' => 'jp',
      'label' => $this->t('Japan'),
      'display_label' => $labels['vat'],
      'territories' => [
        ['country_code' => 'JP'],
      ],
      'rates' => [
        [
          'id' => 'standard',
          'label' => $labels['standard'],
          'percentages' => [
            ['number' => '0.1', 'start_date' => '2019-10-01'],
          ],
          'default' => TRUE,
        ],
        [
          'id' => 'reduced',
          'label' => $labels['reduced'],
          'percentages' => [
            ['number' => '0.08', 'start_date' => '2019-10-01'],
          ],
        ],
      ],
    ]);

 

 

CMS: