バージョン選択

フォーラム

メニュー

オンライン状況

69 人のユーザが現在オンラインです。 (51 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 69
もっと...

サイト内検索

質問 > その他 > 商品検索ブロックの動作について教えてください

その他

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
in_kyoto
投稿日時: 2019/6/18 22:07
対応状況: −−−
新米
登録日: 2019/6/18
居住地:
投稿: 2
商品検索ブロックの動作について教えてください
▼テンプレート
[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 開発コミュニティに初めて投稿させていただきますので、
投稿先が間違っていたら申し訳ないですが、どなたか教えていただけませんでしょうか?


468
投稿日時: 2019/6/21 16:15
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 1818
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に関連するファイルファイルかと思いますので、
今回の挙動には、ほとんど関係ないものと思います。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

in_kyoto
投稿日時: 2019/6/22 0:59
対応状況: 解決済
新米
登録日: 2019/6/18
居住地:
投稿: 2
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さんの書き込みには感謝感謝です。
まだまだ細かいルールなどは理解できてませんが、なんとなく雰囲気がわかりました。
本当にありがとうございます。

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

ec-cube.co

統計情報

総メンバー数は49,516名です
総投稿数は93,188件です

投稿数ランキング

1
seasoft
7332
2
AMUAMU
2712
3
nanasess
1967
4
468
1818
5
yuh
1602
6
red
1343
7
umebius
1296
8
fukap
907
9
h_tanaka
907
10
tsuji
856
11
shutta
835
12 ramrun 789
13
tao_s
774
14 karin 656
15 sumida 641
16
homan
633
17 DELIGHT 571
18
patapata
502
19
flealog
483
20 tonton 436


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.