NO IMAGE

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

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

目標:

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

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

基本

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

[変更前]
APP_ENV=prod
APP_DEBUG=0

[変更後]
APP_ENV=dev
APP_DEBUG=1
  • アノテーション コントローラー内の@ ~というコメントアウト内ような場所
  • エンティティ   Entity データを保持するためのクラス

問題と解決

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

          テンプレートを読みに行く順番
          1. カスタマイズ   :/app/template/[template_code]
          2. 標準のディレクトリ:/src/Eccube/Resource/template/[template_code]
          3. プラグイン     :/app/Plugin
          参考:https://doc4.ec-cube.net/design_template
        4. コントローラの標準ディレクトリーはどこにある?
          /src/Eccube/Controller

          /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 クラス名と同じファイルをアップ

          <?php
          namespace Customize\Controller;
          
          use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
          use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
          use Symfony\Component\HttpFoundation\Response;
          
          class EntrytestPageController
          {
              /**
               * @Method("GET")
               * @Route("/entrytest")
               */
              public function testMethod()
              {
                  return new Response('会員登録テストページです !');
              }
          }

          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を追加

          INSERT INTO `dtb_page` (`master_page_id`, `page_name`, `url`, `file_name`, `edit_type`, `author`, `description`, `keyword`, `create_date`, `update_date`, `meta_robots`, `meta_tags`, `discriminator_type`) VALUES
          (
              NULL,
              '新流れ規会員登録ページ', /* ページ名 */
              'newentry', /* url */
              'NewEntry/index', /* テンプレートファイル */
              2,
              NULL,
              NULL,
              NULL,
              NOW(),
              NOW(),
              NULL,
              NULL,
              'page'
          );

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

          ■躓き

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

          FatalThrowableError
                 $url = $router->getRouteCollection()->get($PrevPage->getUrl())->getPath();

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

          <?php
          namespace Customize\Controller;
          use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
          use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
          use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
          use Symfony\Component\HttpFoundation\Response;
          class NewentryPageController
          {
              /**
               * @Method("GET")
               * @Route("/newentry", name="newentry")
               * @Template("Newentry/index.twig")
               */
              public function testMethod()
              {
                  // とりあえずnameにEC-CUBEという文字列を入れておく
                  return ['name' => 'EC-CUBE'];
              }
          }

          ここの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  以下を消す

           <dl>
                                      <dt>
                                          {{ form_label(form.company_name, 'common.company_name', { 'label_attr': { 'class': 'ec-label' }}) }}
                                      </dt>
                                      <dd>
                                          <div class="ec-halfInput{{ has_errors(form.company_name) ? ' error' }}">
                                              {{ form_widget(form.company_name) }}
                                              {{ form_errors(form.company_name) }}
                                          </div>
                                      </dd>
                                  </dl>

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

                                  <dl>
                                      <dt>
                                          {{ form_label(form.job, 'common.job', { 'label_attr': {'class': 'ec-label' }}) }}
                                      </dt>
                                      <dd>
                                          <div class="ec-select{{ has_errors(form.job) ? ' error' }}">
                                              {{ form_widget(form.job) }}
                                              {{ form_errors(form.job) }}
                                          </div>
                                      </dd>
                                  </dl>
          
        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

                $res = hash_hmac($this->password_hash_algos, $raw.':'.$this->auth_magic, $salt);

          ここか、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 とある。

           echo hash_hmac('sha256', $password . ':' .$auth_magic, $salt);

          これで行けた。

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


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

          04:41 作業開始、

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

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

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

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


          1. バージョン確認:\vendor\symfony\http-kernel\Kernel.php
                const VERSION = '3.4.26';
                const VERSION_ID = 30426;
                const MAJOR_VERSION = 3;
                const MINOR_VERSION = 4;
                const RELEASE_VERSION = 26;
                const EXTRA_VERSION = '';

            テンプレートの使い方
            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

     

NO IMAGE
最新情報をチェックしよう!

    Warning: Trying to access array offset on value of type bool in /home/xsvx1010357/kato.space/public_html/wp/wp-content/themes/the-thor/template-parts/single-prevnext.php on line 37

    Warning: Trying to access array offset on value of type bool in /home/xsvx1010357/kato.space/public_html/wp/wp-content/themes/the-thor/template-parts/single-prevnext.php on line 38

    Warning: Trying to access array offset on value of type bool in /home/xsvx1010357/kato.space/public_html/wp/wp-content/themes/the-thor/template-parts/single-prevnext.php on line 39

  • Warning: Trying to access array offset on value of type bool in /home/xsvx1010357/kato.space/public_html/wp/wp-content/themes/the-thor/template-parts/single-prevnext.php on line 83

    Warning: Trying to access array offset on value of type bool in /home/xsvx1010357/kato.space/public_html/wp/wp-content/themes/the-thor/template-parts/single-prevnext.php on line 84

    Warning: Trying to access array offset on value of type bool in /home/xsvx1010357/kato.space/public_html/wp/wp-content/themes/the-thor/template-parts/single-prevnext.php on line 85

EC-CUBE 4の最新記事8件

>最強のWordPressテーマ「THE THOR」

最強のWordPressテーマ「THE THOR」

システムの構築・保守運用「   」 社内システム担当が欲しいが、専属で雇うほどの仕事量はない。 必要な時に必要なだけ頼りたいというお悩みを持つ企業様へ専門知識を持って対応を行っております。 サーバから各種システムまで自社・他社で構築されたシステムに対してサポートを行っております。

CTR IMG