エンジニ屋.com(エンジニヤドットコム)

分かりやすくを意識して情報発信!

【カスタマイズ】 カート追加時の在庫不足エラーが分かりづらいので変更してみた 【Eccube4】

購入個数が在庫より上回っている際に、エラーが表示される。デフォルトのエラー分では、カートに商品が入ったかどうか分かりにくい。 そんなエラー文を変更してみたいと思う。

要点

  • 在庫不足時にエラーが表示されるが、カートに追加されているのかされいないのかわからない。
  • 在庫個数が表示されるように文言を修正

Eccubeバージョン

  • Eccube4.0.6

イメージ画像

  • カスタマイズ前 f:id:enginiya:20211024005804p:plain
  • カスタマイズ後 f:id:enginiya:20211024012208p:plain

エラー文言の書き換え

エラーの文言が生成されているとこ先ず探すとsrc/Eccube/Resource/locale/messages.ja.yamlの365行目あたりに記載されている。 それを下記のように変更します。

front.shopping.out_of_stock: 恐れ入りますが、「%product%」の在庫数が%stock%個となります。カートに%stock%個入っております。

上の文言の内容は1つの例なので、表示させたいようにこちらは自由に変えてください。

文言呼び出しているファイルの修正

%stock%という箇所に在庫数が入るようにしたいので、次にこの文言を使用しているファイルを探します。 src/Eccube/Service/PurchaseFlow/ValidatorTrait.phpでバリデーションによるエラーを返しているファイルがあるので、こちらに下記コードを28行目の下に追加します。

$productStock = $ProductClass->getStock(); 

そして36行目のコードを下記のように替えます。

throw new InvalidItemException(trans($errorCode, ['%product%' => $productName), null, $warning);

要するに在庫数量を変数に格納してからエラーメッセージで渡すコードを書いています。

以上で、メッセージのカスタマイズでした。他のエラーメッセージも同じように応用が出来そうですね。

※<注意>他のプラグインやカスタマイズとの競合により動作異常が起きる場合があるので、カスタマイズを行う際はくれぐれも慎重にお願いします。

最後に

Eccubeはsymfonyのフレームワークで構成されています。もし「自力でもっとカスタマイズしたい」や「仕事でEccubeで開発することになった」方には、下記のsymofony4 入門の参考書をおすすめします。
こちらの参考書にはEccubeのカスタマイズ方法については一切記載されていないので、また別で学習する必要はありますが、Entity、Controller、twig、Repositoryの利用方法が非常に分かりやすく書かれています。筆者も仕事でEccubeに携わることとなり、参考書を購入し理解が深まりました。 symfonyはLaravelと密接している部分もありLaravelの構成部分の理解も深まり有益でした。
価格帯は若干高めですが、中身はしっかりしているので、購入して損はないと思います。