有限会社スプレッドワークス/Spread Works Inc.
ECサイト構築Webサイト構築Webシステム開発マーケティング支援制作実績課題解決
SERVICESサービス紹介
ECサイト構築・運用
CASES / WORKS課題解決 / 制作実績
NEWS / COLUMNお知らせ / ナレッジ・コラム
雑記

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

EC-CUBEの勉強会レポート

日時: 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バンドルば別のところで使用している。

Workflow の参考リンク:

Q. PurchaseFlowで実装できなかったカスタマイズはあるか?

A. 通常便、クール便を含んだ注文の場合、配送種別毎にシステム側で配送先データを生成する必要があった。PurchaseFlowの仕組みでは、要求が実現できず、本体のソースコードを編集して実現した。

最後に

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

カテゴリー
  • すべて

  • 雑記

  • 技術アーカイブス

Powered by SPREAD Commerce on EC-CUBE.copyright © Spread Works Inc. all rights reserved.