EC CUBE TOKYO UG 2019 02 07

EC-CUBE 東京UG 勉強会 / 2019-02-07 レポート

日時:2019年2月7日 19:00から
場所:Connecting The Dots YOYOGI / B1

初めて、EC-CUBEの勉強会に参加しました。勉強会の内容と所感を交えて、レポートを残します。
今回のテーマは注文明細に値引きを追加や、送料計算のカスタマイズなどをすることができるPurchaseFlowの仕組みを理解する勉強で、設計されたEC-CUBEエバンジェリストの足立さんから、ご説明いただきました。内容はサンプルコードの提示と処理内容が表などにまとめられいて、とても理解しやすかったです。

スライド

https://www.slideshare.net/chihiroadachi3/201927-eccubeugpurchaseflow-130874190?fbclid=IwAR1VAYGVyPoFh8tTsTKbLt-p7zIIRrh2YeoB0TtyztygFf13cVPmzpMgG4s

参考資料

サンプルコード

https://github.com/chihiro-adachi/ec-cube/compare/ad03d2d0078f8347c0a8fae9acc1ced74bf6e967…demo-tokyo?fbclid=IwAR3CTDTc6U-Rvobd4hsXn_fK-3etcBtWf6_U6tGgNZSBWqHEt66ADr19XlI

PurchaseFlowの仕様ドキュメント

http://doc4.ec-cube.net/customize_service

ドキュメントに誤りがあり(2019年2月8日現在)
独自に作成した Processor を有効にするには、 app/config/eccube/packages/purchaseflow.yaml の定義を修正します。
とありますが、Processorクラスにアノテーションを指定し、所定のディレクトリに設置すると、自動でロードされ実行されてる仕組みになっています。

use Eccube\Annotation\ShoppingFlow;
use Eccube\Service\PurchaseFlow\DiscountProcessor;

/**
 * @ShoppingFlow
 */
class NebikiProcessor implements DiscountProcessor {
アノテーションには、他に「@CartFlow」「@OrderFlow」が指定できます。
インターフェイスには、他に「ItemValidator」「ItemHolderValidator」などが指定できます。
詳細はスライドやドキュメントを確認してください。

Github Issue

https://github.com/EC-CUBE/ec-cube/pull/2424

質疑応答

(勉強会のあとTwitterなどで収集した情報を編集して記載しています。)

Q.カスタマイズしたファイルはどこにおけばよいの?
A.app/Customizeかapp/Plugin配下に設置すればどこでも読まれるようになっている。

ロードされるパスなどの設定は以下のファイルで行っている。
app/config/eccube/services.yaml
src/Eccube/DepenjencyInjection/*
src/Eccube/Kernel::build()
Q.既存のProcessorを消したり、処理の順番は入れ替えられるの?
A.可能。ただし、本体の設定ファイルを編集する必要がある。

app/config/eccube/packages/purchaseflow.yaml

     45     # Purchase Flow for Shopping
     46     eccube.purchase.flow.shopping:
     47         class: Eccube\Service\PurchaseFlow\PurchaseFlow
     48         calls:
     49             - [setFlowType, ['shopping']]
     50             - [setItemValidators, ['@eccube.purchase.flow.shopping.item_validators']]
     51             - [setItemHolderValidators, ['@eccube.purchase.flow.shopping.holder_validators']]
     52             - [setItemHolderPreprocessors, ['@eccube.purchase.flow.shopping.holder_preprocessors']]
     53             - [setDiscountProcessors, ['@eccube.purchase.flow.shopping.discount_processors']]
     54             - [setItemHolderPostValidators, ['@eccube.purchase.flow.shopping.holder_post_validators']]
     55             - [setPurchaseProcessors, ['@eccube.purchase.flow.shopping.purchase']]
Q.Processorの実行途中で、次のProcessorに行かないような処理はできるの?
A.止められない。
Q.Processorの実行状況、結果をロギングする仕組みはあるのか?
A.実装していない。
Q.Processorの中で例外エラーが発生した時はどう取り扱う?
A.Processor処理内容、エラー内容で適宜判断。
Q.Symfonyのworkflowは使っているのか?
A.使用していない、独自実装。workflowバンドルば別のところで使用している。

Workfflow の参考リンク
https://symfony.com/doc/3.4/components/workflow.html
https://a-zumi.net/eccube4-cancel-status/
https://github.com/EC-CUBE/ec-cube/pull/3325
Q.PurchaseFlowで実装できなかったカスタマイズはあるか?
A.通常便、クール便を含んだ注文の場合、配送種別毎にシステム側で配送先データを生成する必要があった。PurchaseFlowの仕組みでは、要求が実現できず、本体のソースコードを編集して実現した。

最後に

皆さん何かしらの目的をもって参加されていて、大半の方がエンジニア、フリーランスのクリエイター、店舗オーナー、決済会社の方達で、知り合いだけで固まっているような感じはなく、はじめての方でも、気負うことなく参加できる勉強会だと思いました。登壇者の方以外にも、参加者の皆さんから色々なお話を聞けて、とめもためになりました。
勉強会の題材のドキュメントやソースコードは事前にもっと確認しておけば、より身についたなーと。次回に活かそうと思います。

関連記事

  • [EC-CUBE 4] 出力するHTMLをminify(圧縮)する[EC-CUBE 4] 出力するHTMLをminify(圧縮)する EC-CUBE4になってから、Symfonyで用意している機構へ簡単にアクセスできるようになりました。今回は Symfony の EventListener […]
  • [EC-CUBE 4] トップページにカテゴリ一覧を表示するカスタマイズ[EC-CUBE 4] トップページにカテゴリ一覧を表示するカスタマイズ 前回トップページに新着商品を表示するカスタマイズを紹介しました。 今回は、そのコードを利用して特定のカテゴリの商品を表示していきます。 カテゴリには「新入荷」を利用します。「新入荷」以外のカテゴリにすることもできますので、最後までお付き合いください。 ※本記事は、前回の続きと […]
  • [EC-CUBE 4] トップページに新着商品を表示するカスタマイズ[EC-CUBE 4] トップページに新着商品を表示するカスタマイズ EC-CUBE4になってTOPページのデザインも、より魅力的なものになりました。 しかし、トップページにある新着商品は、自動で更新されるものになっていません。 そこで今回は、商品を追加したときに自動で更新するようにカスタマイズしていきます。 また、カスタマイズ方法ですが、EC-CUB […]