質問 > その他 > 商品検索ブロックの動作について教えてください |
その他
スレッド表示 | 古いものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
in_kyoto |
投稿日時: 2019/6/22 0:59
対応状況: 解決済
|
新米 登録日: 2019/6/18 居住地: 投稿: 5 |
Re: 商品検索ブロックの動作について教えてください 468さん、ご回答ありがとうございます。
defolt_frame.twig を起点としてレイアウト設定で指定されたブロックを block.twig でincludeする。 その際、dtb_blockのuse_controllerが参照され、 1であれば、block_ + file_nameで対象のコントローラを呼び出し、コントローラで指示された方法で出力 0であれば、file_name + .twigで出力 ということですね。わかりました! 468さんの書き込みを読んで感じたのですが、肝になるのは 1)SymfonyのMVCの考え方、画面に出力されるまでに、どのように動作するのか コントローラ、エンティティとリポジトリ、twig ページ→フレーム→ブロックの流れ、フォームなど 2)@Routeアノテーションで設定しておけば、どこからでもnameでクラスを読み込める twig上からでも@Routeアノテーションのnameで指定していればurl()などの関数でリンクを生成できる 3)ECサイトとして動作するために必要な動作や構造がEC-CUBEとして拡張されている おそらくproductやblock、BaseInfoなどのデータベースやクラスなどを Symfonyの機能を利用してadmin.setting.shop.tax_settingのような形でデータを取り出しやすく保持している つまり、EC-CUBEはSymfonyのクラスをもとに拡張を施されているので extendで指定されているクラスやuseで指定されているクラスをもとにコードを読み解いていけば、いずれSymfonyにいきあたる。 なので、まずは、その過程で行われている処理がSymfony由来のものなのか、EC-CUBEによる拡張なのかを判断できるようになれば作業もはかどるという感じですね。 リポジトリ->findAll()はSymfony (かな?) リポジトリ->getId()はEC-CUBE (だと思いたい) 2週間ほど、あれこれ触ってみたのですが、自分一人で上記のように考えをまとめることが難しかったので、468さんの書き込みには感謝感謝です。 まだまだ細かいルールなどは理解できてませんが、なんとなく雰囲気がわかりました。 本当にありがとうございます。 |
468 |
投稿日時: 2019/6/21 16:15
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: 商品検索ブロックの動作について教えてください 1)については、
/src/Eccube/Resource/template/default/block.twig を確認いただければ理由が理解いただけるのではないでしょうか? use_controllerカラムが1の時は、 {{ render(path('block_' ~ Block.file_name)) }} で、render()とpath()を利用してコントローラークラスを介した流れを実行しています。 その為、コントローラークラスの@Templateアノテーションで指定されたtwigを利用しているかと思います。 ※SearchProductControllerは@Template("Block/search_product.twig")を指定。 2)についても 先程と同じ /src/Eccube/Resource/template/default/block.twig を確認いただければ理由が理解いただけるのではないでしょうか? {{ render(path('block_' ~ Block.file_name)) }} でpathに指定されている文字列ですが、dtb_blockテーブルのfile_nameカラムの値を利用しています。 その為、以下のような文字列で処理されると思います。 path('block_serch_product') ここでいう引数の'block_serch_product'はルーティング名を指しています。 コントローラークラスの@Routeアノテーションでルーティング名を指定していますが、 全てのコントローラークラスの中から一致するメソッドを探して実行すべきコントローラーとメソッドを確定します。 今回の場合は、SearchProductController->index()の@Routeアノテーションに以下の記述がありますので、一致すると判定されます。 @Route("/block/search_product", name="block_search_product") ※name="***"の文字列で判断 3), 4)の回答ですが、 これらの挙動はSymfonyでの決まり事に合わせて、 ECCUBEが動作するように設計された仕組みになります。 コントローラークラスの@Routeアノテーションや@Templateアノテーション、 twig上のrender()やpath()はSymfonyの仕組みで、 dtb_blockテーブルやblock.twigの記述はECCUBE独自の仕組みとなります。 vendor/composer/autoload_classmap.php vendor/composer/autoload_static.php こちらのファイルはcomposerに関連するファイルファイルかと思いますので、 今回の挙動には、ほとんど関係ないものと思います。
|
in_kyoto |
投稿日時: 2019/6/18 22:07
対応状況: −−−
|
新米 登録日: 2019/6/18 居住地: 投稿: 5 |
商品検索ブロックの動作について教えてください ▼テンプレート
[EC-CUBE] EC-CUBE4.0.3 新規インストール [レンタルサーバ] さくらインターネット [導入プラグインの有無] なし [カスタマイズの有無] あり [現象] 下記ページを参考に動的なブロックを追加しました。 https://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=21461&forum=10&post_id=90316#forumpost90316 悪戦苦闘しながらもブロックは追加で、目的を果たすことができました。本当にありがとうございます。 そのブロックの追加の過程で、でてきた疑問を教えていただければありがたいです。 1)なぜ、商品検索ブロックはdtb_blockテーブルのuse_controllerカラムが1なのに src/Eccube/Resource/template/default/Block の tiwgファイルを読み込まずに、ブロックの管理画面で設定したtwigを読み込むのでしょうか? 2)なぜ、商品検索ブロックはdtb_blockテーブルのfile_nameカラムにある search_productを元にしたコントローラ block_serch_product.php(仮)を読み込まずに src/Eccube/Controller/Block の SearchProductController.phpを読み込むのでしょうか? 3)悪戦苦闘の最中に、下記の2点のファイル内で商品検索ブロックに対する指定のようなものを見つけました。 vendor/composer/autoload_classmap.php vendor/composer/autoload_static.php これら2点の設定により1)と2)のような現象が起こるのでしょうか? また、これらのファイルにもキャッシュのような機能が働くのでしょうか? 4)これらの動作はSymfonyの機能によるものでしょうか?EC-Cubeの機能によるものでしょうか? EC-Cube 開発コミュニティに初めて投稿させていただきますので、 投稿先が間違っていたら申し訳ないですが、どなたか教えていただけませんでしょうか? |
スレッド表示 | 古いものから | 前のトピック | 次のトピック | トップ |