Memo

メモ > 技術 > CMS: ECCube > カスタマイズ

■カスタマイズ
WebデザイナーがEC-CUBE4を触る為に知っておくと良い事 | EC-CUBE CORPORATE BLOG https://www.wantedly.com/companies/ec-cube/post_articles/199543 EC-CUBE4 Template for Adobe XD on Behance https://www.behance.net/gallery/94593359/EC-CUBE4-Template-for-Adobe-XD EC-CUBE 4.0 開発者向けドキュメント - < for EC-CUBE 4.0 Developers /> https://doc4.ec-cube.net/ ■ファイル構成 ディレクトリ・ファイル構成 - < for EC-CUBE 4.0 Developers /> https://doc4.ec-cube.net/spec_directory-structure src内にECCubeのプログラムが格納されているが、原則この中は編集しない app内にファイルをコピーし、そのコピーしたファイルを編集する ただしPHPプログラムの場合、以下のように namespace の調整が必要になる可能性があるので注意 (以下は src\Eccube\Service\OrderStateMachine.php を複製して app\Customize\Service\OrderStateMachine.php を作成した場合)
namespace Eccube\Service; ↓ namespace Customize\Service;
コントローラやビューは上記のとおりapp内にコピーを作成すればいいが、 ファイルによってはsrc内のファイルを直接編集する必要があるかもしれない 都度要確認 ■ルート定義の確認 Symfonyのルート定義は、yamlで定義する方法とアノテーションで定義する方法の2種類がある ECCubeではアノテーション方式が採用されている アノテーションは便利ではあるが、全体を把握しにくいデメリットがある 新しいページを作成しようとした際にルート名が既にあるかなど確認したければ、 以下のコマンドでルート定義一覧を確認できる
$ php bin/console debug:router ---------------------------------------------- -------- ------------ ------ ----------------------------------------------------------------- Name Method Scheme Host Path ---------------------------------------------- -------- ------------ ------ ----------------------------------------------------------------- admin_login ANY https|http ANY /ecadmin/login admin_homepage ANY https|http ANY /ecadmin/ admin_homepage_sale ANY https|http ANY /ecadmin/sale_chart admin_change_password ANY https|http ANY /ecadmin/change_password admin_homepage_nonstock ANY https|http ANY /ecadmin/search_nonstock 〜中略〜 vt4g_plugin_shopping_payment_recv ANY https|http ANY /shopping/vt4g_payment_recv mypage_vt4g_account_id ANY https|http ANY /mypage/vt4g_account_id vt4g_account_id_card_delete ANY https|http ANY /vt4g_account_id/{cardId}/card_delete news_detail GET https|http ANY /news/{id} ---------------------------------------------- -------- ------------ ------ -----------------------------------------------------------------
■キャッシュの扱い コントローラやテンプレートは、ECCube設置ディレクトリ内の html/var/cache 内にキャッシュが作成される 具体的には html/var/cache/prod/twig/b3/b3e156cd992b8f915fb07ae6291c4614787a7b3146f1c86e8ffb6aa78ddcd6f9.php のような場所に作成される ECCubeのキャッシュはなかなか強力で、これが原因で正しく動作しないことが多々ある 意図したとおりに反映&動作しなければ、まずはキャッシュの全削除を試すといい。以下のコマンドでキャッシュを削除できる 次回アクセス時にキャッシュが再生成される(初回アクセス時は非常に重いので注意)
$ cd /var/www/main/html $ php bin/console cache:clear --no-warmup
もしくは管理画面の「コンテンツ管理 → キャッシュ管理」からキャッシュを削除することもできる ただし上記のようにコマンドで削除するほうが確実かもしれない 管理画面からキャッシュを削除しても挙動がおかしければ、コマンドでの削除を試す キャッシュの生成は
$ php bin/console cache:warmup
を実行することでも対応できる …が、ローカルのVagrant環境で試すと 「Error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 524288 bytes)」 のエラーになった。ブラウザからアクセスしてキャッシュを再生成させると大丈夫だった なお、部分的な表示変更のための編集なら html/var/cache/prod/twig/b3/b3e156cd992b8f915fb07ae6291c4614787a7b3146f1c86e8ffb6aa78ddcd6f9.php などをピンポイントで手動削除すれば高速に表示確認できる 上記だと対象ファイルを探すのが面倒だが html/var/cache/prod/twig をフォルダごと削除する方法なら、対象は明確だし次回の表示もそれほど時間はかからない この方法が一番無難かもしれない また、.env で以下のように設定すると、キャッシュが作成されないようになり、デバッグバーが表示される(開発用) ただし一部キャッシュなしで動作するので、キャッシュ再生成時ほどではないがそれなりに重い
APP_ENV=prod APP_DEBUG=0 ↓ APP_ENV=dev APP_DEBUG=1
なおVagrantを使用している場合、共有フォルダをNFSにすると大幅に改善する可能性がある Vagrant(VirtualBox)でディスクアクセスが遅い問題の対処法 https://masshiro.blog/vagrant-laravel-slow/ EC-CUBE 開発コミュニティ - フォーラム https://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=20574&forum=2 ■テンプレートの編集 以下の場所にテンプレートがある html\src\Eccube\Resource\template 例えば以下のファイルを編集すると、ログイン画面に反映される html\src\Eccube\Resource\template\default\Mypage\login.twig ただし元のファイルは直接編集せずに、以下に複製配置して編集することが推奨される(コントローラなど他ファイルも同様) html\app\template\default\Mypage\login.twig 反映されない場合はキャッシュを削除する テンプレートは管理画面の「オーナーズストア → テンプレート → テンプレート一覧」から確認できる ダウンロードすると、CSSファイルや画像ファイルに加え、上の手順で複製配置した差分ファイルを取得できる デザインテンプレートの基礎 - < for EC-CUBE 4.0 Developers /> https://doc4.ec-cube.net/design_template EC-CUBE4:デザインテンプレートのインストール | ITOBEN STYLE Blog https://itoben.com/blog/3751.html ■CSSファイルの編集 ※GulpでSassをビルドする手順があるが、エラーで進められず 詳細は「メモ」の「CSSファイルの編集」を参照 ■プレースホルダの変更 フォームの入力例は、以下のファイルで変更することができる プレースホルダ内にある文字列「5300001」などで検索すると、該当箇所を見つけることができる src\Eccube\Resource\locale\messages.ja.yaml ■メールテンプレートの追加 「受注編集」画面の最下部に「メールを作成」ボタンがあり、ここから送信ができる テンプレートを選択できるが、現状本番環境では「注文受付メール」のみになっている 以下によると、テンプレートの作成とデータベースの調整で対応できそう EC-CUBE4でメールテンプレートを追加する方法 | コトダマウェブ https://cotodama.co/ec-cube4_mail_template/ また、以下のプラグインを導入すれば管理画面から新規追加できるみたい(有料&未検証) 4.0系|メールテンプレート登録プラグイン for EC-CUBE4|トエビス株式会社 https://www.ec-cube.net/products/detail.php?product_id=1941 ■納品書ロゴの変更 注文管理で納品書を出力したとき、ECCubeのロゴが表示される。これを差し替える方法 管理画面「コンテンツ管理 → ファイル管理」から「asset → pdf」内の「logo.png」に上書きアップロードする EC-CUBE4で納品書ロゴを変更する(4.0.3〜) - Qiita https://qiita.com/kazumiiiiiiiiiii/items/f2e5bdfb902b1b94c00a ■404ページの変更 初期デザインは素っ気ないものなので、サイトに合わせてデザインされたページにしておくといい src\Eccube\Resource\template\default\error.twig を複製して app\template\default\error.twig を作成し、任意の内容に変更する ■メンテナンスモード キャッシュクリア時やプラグインのインストール途中など、 ユーザ側にアクセスしてほしくない場合はメンテナンスモードを利用できる 以下のようにすると、ユーザ側の表示がメンテナンス画面に変更される
$ cd /var/www/main/html $ touch .maintenance
以下のようにすると、メンテナンス画面が解除される
$ cd /var/www/main/html $ rm .maintenance
なお、この機能は管理画面からも利用できる 管理画面の「コンテンツ管理 → メンテナンス管理」から、メンテナンスモードの有効・無効を切り替えることができる メンテナンス機能を追加 by okazy - Pull Request #3998 - EC-CUBE/ec-cube https://github.com/EC-CUBE/ec-cube/pull/3998 ■税抜価格(税別価格)で表示 プラグインがあるくらいなので、標準機能では対応していないみたい 4.0系|割引率表示、税抜表示プラグイン(EC-CUBE4.0系対応)|株式会社YMK https://www.ec-cube.net/products/detail.php?product_id=2074 ただし、ユーザ側の表示に限定すれば大変な改造にはならないかもしれない 「カートに入れたときの表示」「注文メールの内容」「マイページでの表示」などはあるので、あちこち調整が必要になるかもしれないが EC-CUBE 開発コミュニティ - フォーラム https://xoops.ec-cube.net/modules/newbb/viewtopic.php?viewmode=flat&topic_id=22003&forum=10 ※以下「法律.txt」にも同じ内容を記載している 消費税転嫁対策特別措置法により、税抜表示が問題になる可能性があるらしい? 要勉強 消費税転嫁対策特別措置法 | 消費者庁 https://www.caa.go.jp/policies/policy/representation/consumption_tax/ 10%増税に備えよう!消費税転嫁対策特別措置法まとめ https://biz.moneyforward.com/accounting/basic/13868/ 消費増税前に再確認! 消費税転嫁対策特別措置法って? - マネーイズム https://www.all-senmonka.jp/moneyizm/1088/ ■商品ごとに税率を設定する バージョン4.0.3からは対応している ただし4.0.3時点では商品別税率設定の税率が正しく反映されないケースがあるとのこと(以下ページ参照) またプラグインや表示カスタマイズ部分も含めて対応できているか、は何とも言えないので、設定する前にひととおりの検証は必要 EC-CUBE 4.0.3 で改善された軽減税率制度関連機能と設定方法を見てみよう! - ネットショップの壺 https://tsubo.ec-cube.net/2019/09/09/10674 ■商品登録時の価格を内税にする 税率設定を0%に設定し、商品登録時の商品価格を税込み価格で登録することで、全ての価格を内税(税込)運用とすることはできるみたい ただし表示部分のテンプレートは編集する必要はあるみたい EC-CUBE4設定>店舗設定>税率設定 | EC-CUBE4 管理・運用マニュアル | shiro8 https://www.shiro8.net/manual4/v40x/setting/shop_tax.html 税率設定 - < for EC-CUBE 4.0 Developers /> https://doc4.ec-cube.net/spec_tax ■タグによる検索 商品情報として「タグ」を登録できる ただし標準機能では、このタグをもとに絞り込み検索する機能は無いみたい EC-CUBE4のフロントの検索ボックスで商品タグ検索できるようにする方法 - あずみ.net https://a-zumi.net/eccube4-tag-search/ [EC-CUBE4]タグIDで商品一覧を絞り込めるようにするよー | Hiroki's toy box https://blugrit.com/2020/04/05/ec-cube4-product-list-tag-id/ 4.0系|商品タグ検索プラグイン for EC-CUBE4|あずみ.net https://www.ec-cube.net/products/detail.php?product_id=1862 4.0系|商品タグ機能拡張(4.0対応版)|systemkd https://www.ec-cube.net/products/detail.php?product_id=1709 ■商品一覧の表示件数を変更する 管理画面の「設定 → システム設定 → マスターデータ管理」で mtb_product_list_max をいじることで、ユーザ側での商品一覧の表示件数を変更できる データの並びを変更すれば、デフォルトの指定も変更できる(一番上のデータがデフォルトの指定となる) EC-CUBE4で商品一覧のソート順を「新着順」を初期表示にする - Qiita https://qiita.com/chihiro-adachi/items/279a05d833e87bc84076 ■商品一覧の並び順を「新着順」を初期表示にする 管理画面の「設定 → システム設定 → マスターデータ管理」で mtb_product_list_order_by をいじることで、ユーザ側での商品一覧の並び順を追加できる データの並びを変更すれば、デフォルトの指定も変更できる(一番上のデータがデフォルトの指定となる) ■商品一覧の並び順を任意のものに変更する 管理画面の商品一覧で、簡単に並び順を変更する機能は無いみたい プログラムを改造するか、プラグインを探すなどする必要がある [EC-CUBE 4] 商品一覧ページのソート順をカスタマイズ - スプレッドワークス - Web制作会社/システム開発 - 東京都豊島区南池袋 https://www.spreadworks.co.jp/product-list-sort-order-change-for-ec-cube4/ EC-CUBE4の管理画面で「商品」「受注」「会員」一覧の並び順を変更する方法 | TechMemo https://techmemo.biz/ec-cube/eccube4-admin-list-orderby/ 4.0系|商品並び替えプラグイン(CSV一括更新対応) for EC-CUBE4|あずみ.net https://www.ec-cube.net/products/detail.php?product_id=1890 「売上順」もしくは「売れ筋順」でよければ、以下のプラグインによって対応できる 4.0系|売上順・売れ筋順並び替えプラグイン for EC-CUBE4|株式会社U-Mebius https://www.ec-cube.net/products/detail.php?product_id=2006 ■受注一覧の「対応状況」の色 「システム設定 → マスターデータ管理」の mtb_order_status_color で色を変更できる ステータスが違っても色が同じになっているものがあるので、判りづらいようなら必要に応じて変更する ■受注編集時に「注文者」が折りたたまれないように 「受注管理」で受注を編集する際、「注文者」がデフォルトで折りたたまれている これをデフォルトで折りたたまれないようにする src/Eccube/Resource/template/admin/Order/edit.twig を複製して app/template/admin/Order/edit.twig を作成し、 360行目あたりあたりにある以下の部分をそれぞれ調整する
<i class="fa {{ id ? 'fa-angle-down' : 'fa-angle-up' }} fa-lg"></i></a></div> ↓ <i class="fa fa-angle-up fa-lg"></i></a></div>
<div class="collapse {{ id ? '' : 'show' }} ec-cardCollapse h-adr" id="ordererInfo"> ↓ <div class="collapse show ec-cardCollapse h-adr" id="ordererInfo">
■受注CSVに送料と手数料を出力しない EC-CUBE 開発コミュニティ - フォーラム https://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=21851&forum=11 src\Eccube\Controller\Admin\Order\OrderController.php の415行目あたり、
// データ行の出力. $this->csvExportService->setExportQueryBuilder($qb); $this->csvExportService->exportData(function ($entity, $csvService) use ($request) { $Csvs = $csvService->getCsvs(); $Order = $entity; $OrderItems = $Order->getOrderItems(); foreach ($OrderItems as $OrderItem) {
この直後に以下を追加して対応できた ロジックとしては「送料と手数料を省く」というより「商品コードがなければ省く」となっている
//商品コードがなければループをスキップする if (!$OrderItem->getProductCode()) { continue; }
■購入時に画像を添付 ※未検証 標準機能では対応できないようだが、以下で改造方法が紹介されている 【EC-CUBE4】購入手続き時にファイルをアップロードできる機能を実装する方法 - あずみ.net https://a-zumi.net/eccube4-shopping-file-upload/ ■カートの内容を参照 カートの情報はデータベースの dtb_cart テーブルに記録されている。 カート内商品の情報は dtb_cart_item テーブルに記録されている。 この情報をもとに ・どの会員のカートに何が格納されているか ・商品と合計金額は何か ・最後にカートが操作されたのはいつか などは確認できそう。 上記の内容を管理ページで一覧表示できれば十分、ならプラグインを使うほどでは無いと思われる。 なお、ログインせずにカートに入れると dtb_cart テーブルの customer_id はNULLになっている ■代理キーでのデータ判定について考察 例えば「クレジットカード決済を選択したら○○を表示する」のような分岐をしたい場合、データの特定には ・代理キー ・名称 のいずれかを使うことになる(code や key のような値を持っていない) 「代理キー」で分岐を作ると「5なら○○を表示する」のような代理キーに依存した作りになってしまうし、「名称」で分岐を作ると名前の変更が難しくなる ECCubeの仕様と妥協するしか無いかもしれないが、以下に管理方法の例を記載する 「代理キー5はクレジットカード決済」のような情報はyamlファイルで設定として持っておく また app/config/eccube/packages/eccube.yaml を参考にして、 「ECCUBE_COOKIE_NAME などは初期値があるが、.env から変更もできる」 という仕組みにしておくと、環境によって代理キーが変わる場合でも柔軟に対応できる eccube.yaml の扱いは、このファイル内にある「運用のためのメモ」の「環境による分岐」も参照 app/config/eccube/packages/eccube.yaml ではなく app/Customize/Resource/config/services.yaml などを作って設定する方がいいかもしれないが、詳細は引き続き要検証 ■その他 このファイル内の「仕事で使う場合の注意」を参考に、必要に応じてカスタマイズを行う

Advertisement