EC-CUBE 4 購入の流れを変更 01

この記事はEC-CUBE4 作業しながらのメモで、更新している記事です。
役には立たないので注意。

目標:

購入フローでは、カート→情報入力(顧客情報・配送・支払い)→完了としたい。

購入フローを色々と弄るが、一時的にオブジェクトに入れるとか面倒な点が多い
そこでuser_dateで作るのが良いとなる。

基本

.env 修正してデバックモードへ

  • アノテーション コントローラー内の@ ~というコメントアウト内ような場所
  • エンティティ   Entity データを保持するためのクラス

問題と解決

        1. ページ作成でtwig追加で、動的なものはコントローラーを追加し、DBのdtb_page追加は分かったが、コントローラの記述の方法が不明
        2. 直接DBに入れた場合にどこのテーブルを弄るのか?
        3. twig にURLを入れたが、このデータはファイルを消せばきえるのか?
          消える。最初にapp/template/default/内にtwigテンプレートがあれば読みにいく。なければ標準ディレクトリーを読みに行く。ここはページ管理でも自動で読みに行く。
        4. コントローラの標準ディレクトリーはどこにある?
          /src/Eccube/Controller

          単純に/app/Controller/ に同じコントローラー複製して入れるとエラーになる。
          FatalErrorException Compile Error: Cannot declare class Eccube\Controller\EntryController, because the name is already in use
          ネームスペースをnamespace Customize\Controller; としてエラー、どうやってコントローラを作るのか?クラス名か?
          複製して、ルートを変えてもエラーに。SamplePageController.phpは追加できるのに、
          同じディレクトリーにコントローが追加できない。コントローラーのファイル名は?Symfonyを見る
        5. 独自にコントローラーをアップしてみる。
          EntrytestPageController クラス名と同じファイルをアップ

          Ok、問題ない。
        6. テンプレートを追加して部品を追加できるか?
          【公式】Controllerのカスタマイズ
          https://doc4.ec-cube.net/customize_controller
          テンプレートを指定
          * @Template(“/entrytest.twig”)エラー、再度EC-CUBE4 削除後、インストール。23:25
        7. しいページを用意して、そこにログイン画面などを表示させてみる。app/Customize/Controller/NewEntryController.php 追加
          app/template/default/NewEntry/index.twig  追加NewEntryController.php内に、
          * @Template(“/NewEntry/index.twig”) を追加
          ここでエラーになる。index.twig内に、
          {% block main %}
          {% endblock %} 記載データベースにこのtwigを追加

          まだエラーになるな。
          NewEntryController.phpのテンプレート箇所を削除して管理画面確認
          コントローラーになにか不足してる模様。

          ■躓き

          ● use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; が足りなかった模様
          ●  管理画面、コンテンツ管理から編集できない ->> * @Route(“/newentry”, name=”newentry“)
          迷走  src内のtemplateに入れたがやはりエラー内容は

          管理画面から紐つけるdtb_pageのurlとfilenameが違うのか?
          一度、sampleのでやってみる いけた。

          ここのRoute(“/newentry”, name=”newentry”)が、あってないと
          Call to a member function getPath() on null
          Symfony\Component\Debug\Exception\ FatalThrowableError
          URLエラーなのか。

           

          レイアウトにも追加は管理画面に行う。

        8. フォームや部品を出す。
          会員登録(入力ページ)のコントローラーをコピーして貼り付けたら動作するのか?
          もちろんrouteは変更するが、その前にuseをまるまるコピーではエラー
          ./app/Customize/Form/Extension/ に AbstractTypeExtension を継承したクラスファイルを作成することで、自動的にFormExtensionとして認識されます。
          @https://doc4.ec-cube.net/customize_formtypeなんだそりゃ?05:08Controller内でサービスを利用する
          https://doc4.ec-cube.net/customize_controller最初にuseで指定して、コントローラー内に記載
          その後にフォームを記載しているビューとその付属のコントローラーも呼び出す。
        9. 既存のentryのフォームの出し方を確認
          /src/Controller/EntryController.php では、
          名前空間を指定 namespaceを指定。
          use キーワードで名前空間の記述を短くし別名または同名を作る
          参照:https://qiita.com/7968/items/1e5c61128fa495358c1fpublic function index(Request $request)
          public function complete()
          public function activate(Request $request, $secret_key)3つのアクションを用意して、
          $form = $builder->getForm();
          $Customer = $this->customerRepository->newCustomer();
          $builder = $this->formFactory->createBuilder(EntryType::class, $Customer);
          $form = $builder->getForm();
          return $this->render( ‘Entry/index.twig’, [ ‘form’ => $form->createView(), ] );フォーム自体は、/src/Resource/template/default/Entry/index.twig のフォームを読み込んでいる。
        10. 全体のフォーム自作後、DBに入れるコードと整合性が取れるか?
          まずはフォームの項目を確認 EC-CUBEデフォだと、
          お名前、お名前(カナ)、会社名、住所、電話番号、メールアドレス、生年月日、性別、職業
          会社名と職業を消す。
          会社名
          /src/Resource/template/default/Entry/index.twig  以下を消す

          職業
          /src/Resource/template/default/Entry/index.twig  以下を消す

        11. 確認画面画面を出す
          ボタンの文字はどこで決めているのか?’front.entry.agreeや同意で探したがキャッシュしかない。
          面倒なので、以下、変更
          <button class=”ec-blockBtn–action” type=”submit” name=”mode” value=”confirm”>{{ ‘同意して次へ’|trans }}</button>として変更
        12. 確認画面を出す。
          コントローラーで、
          <form method=”post” action=”{{ url(‘entry’) }}” novalidate class=”h-adr”>に対応したものを作る。
        13. 流れを確認
          通常は会員登録画面->新規会員登録(仮登録完了)
          アドレス /entry/complete になる。
          DBには、dtb_customerに入る。
          仮登録はいらないので、管理画面-設定-基本設定で、仮会員機能は無効にしておく。既に仮会員は本会員にしてDBのステータスを確認
          customer_status_id は1から2に。2が本会員。
          カートのデータはどこに入ってるのか?
          カートはcart_keyがトークンなのか?アドレス/entry で確認画面に。
          functionは、if ($form->isSubmitted() && $form->isValid()) {
          これもテストしてみる。
        14. 確認は、http://アドレス/shopping
          確定は、http://dlabo06.xsrv.jp/shopping/confirm
          完了は、http://dlabo06.xsrv.jp/shopping/complete
        15. バランサ配下で、要は$_SERVER[‘HTTPS’]の代わりに$_SERVER[“HTTP_X_FORWARDED_PROTO”]という変数がPHPアプリケーションに届くので変更if (@$_SERVER[“HTTP_X_FORWARDED_PROTO”] === ‘https’) {
          $_SERVER[‘HTTPS’] = ‘on’;
          }https://umebius.com/eccube/elb-alb-https-restrict-err_too_many_redirects/
        16. ここまで作業して、
          フォーム登録ができるようになったが、

          送付と支払いは結構複雑。逆にゲスト購入のデータを見て、そこに個人情報登録ができれば良いのでは?と思うので、
          1.ゲスト購入の個人情報はどうDBに入っているか?
          2.購入・受注データがどうDBに入ってユーザと紐付けされているか確認

          ゲストはdtb_customerには入っていない。
          受注データはdtb_orderに入っている。
          dtb_orderには、
          customer_id があり、ここがメンバーのidらしいので、
          仮に既にあるcustomer_idを付け替えてみる、そのまま行ける。
          続けて注文も同じ様に入れてみる。いや、面倒だからやめる。
          つまりゲスト購入でフォーム項目を増やせばいいことになるな。そうなると、
          1.ゲスト購入の支払い・配送のビュー・コントローラーを複製し、
          2.会員情報入力フォームを付けて、確認画面を出す。問題は、支払い・配送は別のフォーム・コントローラーなので、
          ゲスト購入時点でそこまでデータも持っているのか確認。
          TODO:ゲスト購入のフォーム複製時にお客様情報をどうやって引き継いでいるか確認。その前に、このゲスト購入したお客をDBを単純にいじって会員とできるか検証。
          直接会員を入れてみる。
          dtb_customer が会員情報だが、ここのカラム
          password、secret_keyの生成方法を確認する。
          注文と紐づいてないか確認
          secret_key  Ag04ZypU2krXR1UAl6NVFpySwwryfzmY
          password  値。
          secret_keyは仮登録の時に利用らしく不明らしい。
          ではpasswordの生成は?sha1とsaltか?
          パスワード生成はの部分を確認する。
          src/Eccube/Security/Core/Encoder/PasswordEncoder.php

          ここか、auth_magicはどこにあるのだ?
          app/config/eccube/packages/eccube.yaml の26行目に
          eccube_auth_magic: ‘%env(ECCUBE_AUTH_MAGIC)%’
          .envの44行目にECCUBE_AUTH_MAGIC= 値 とあった。
          実際にこれでテストしてみる。
          アルゴリズムはapp/config/eccube/packages/eccube.yaml  28行目に  eccube_password_hash_algos: SHA256 とある。

          これで行けた。

          休憩(´・ω・)ス 只今 03:12分


          Q.配送先が同じ画面に、追加できるか?
          メモ:ゲスト購入アドレスは、https://ドメイン/shopping/nonmember

          04:41 作業開始、

          ゲスト時のデータはどこまで持っていくのか確認

          1.ゲスト購入の支払い・配送のビュー・コントローラーを複製。
          2.会員情報入力フォームを付けて、確認画面を出す。問題は、支払い・配送は別のフォーム・コントローラーなので、
          ゲスト購入時点でそこまでデータも持っているのか確認。

          ゲスト購入のお客様入力画面は、/shopping/nonmember ここ違う名前で 
          ご注文手続き /shopping :この画面を使おう。ここにデータがあるか、
          いや、ここで入力ができるか確認
          確認する画面へ
          /shopping/confirm
          で、注文

          長くなったので、違う記事に。


          1. バージョン確認:\vendor\symfony\http-kernel\Kernel.php

            テンプレートの使い方
            http://symdoc.kwalk.jp/doc/book/templating

          2. A:app/template/default/Cart/index.twig

    次にこれをテンプレートに出してみる。

    SSL化後の””http://アドレス.info/block/cart”, が読み込まれない。

    1. 確認画面画面を出す
      ボタンの文字はどこで決めているのか?’front.entry.agreeや同意で探したがキャッシュしかない。
      面倒なので、以下、変更
      <button class=”ec-blockBtn–action” type=”submit” name=”mode” value=”confirm”>{{ ‘同意して次へ’|trans }}</button>として変更

    https://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=21832&forum=10

    確認作業
    cartを表示するtwigを作る。
    ページ作成で、

     

    EC-CUBE4
    EC-CUBE4 購入の流れ 図

    メモのメモ
    ログアウト直後の遷移については、 /app/config/eccube/packages/security.yaml

    参考URL

     

Follow me!

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA