質問 > 管理機能 > パラメータを指定した動的ブロックの呼び出し方 |
管理機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
rmaeda |
投稿日時: 2019/7/9 11:32
対応状況: −−−
|
新米 登録日: 2019/7/9 居住地: 京都府 投稿: 3 |
パラメータを指定した動的ブロックの呼び出し方 [EC-CUBE] 3.0.16
[レンタルサーバ] レンタルサーバ名 [OS] CentOS Linux release 7.4.1708 [PHP] PHP 7.1.19 [データベース] mysql Ver 14.14 [WEBサーバ] Apache/2.4.33 [ブラウザ] Google Chrome [導入プラグインの有無] 複数プラグイン有り [カスタマイズの有無] テンプレート修正等 [現象] プラグイン「タイムセールpro」を利用 コンテンツ管理 > ページ管理 新規にページを作成し、コンテンツ内からブロックを呼び出しています。 ブロックの内容は、カテゴリIDをパラメータで引き渡し そのカテゴリに紐づくタイムセールの商品一覧を表示するブロック。 呼び出しの記述 カテゴリID:100 {{ render(path('block_sales_product', {category_id: 100})) }} アクセスログを確認すると、正しくパラメータが引き継がれているのですが、 コントローラーでパラメータの取得ができない状況です。 アクセスログ eccube.INFO [b20ec879] [a8432248] [NULL] [RouterListener:onKernelRequest:145] - Matched route "block_sales_product". {"route_parameters":{"_controller":"\\Eccube\\Controller\\Block\\SalesProductController::index", "_route":"block_sales_product"}, "request_uri":"https://ドメイン名/block/sales_product?category_id=100"} コントローラーでの記述 $categoryId = $app['request']->get('category_id'); ページ管理から作成したページから、動的ブロックを直接呼び出す場合の、 パラメータの取得についてご教授いただけますでしょうか? ちなみに、以下のURLへ直接アクセスは問題なし https://ドメイン名/block/sales_product/100 ということは、新規作成したページ内のブロック呼び出しのロジックに問題ありでしょうか・・・。 |
468 |
投稿日時: 2019/7/9 12:29
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: パラメータを指定した動的ブロックの呼び出し方 ブロック用のコントローラーはカスタマイズされたものでしょうか?
試した事がないので感覚的な想像ですが、 ブロックコントローラーへの値の渡し方はGETではなく、URLパラメータを利用する必要があるのではないでしょうか? イメージ的には以下のようなURLで動作するルーティングを定義する必要があるのではないかと思います。 https://ドメイン名/block/sales_product/100 そう思った理由はtwig上の {{ render(path('block_sales_product', {category_id: 100})) }} の箇所では、 実際には通信が発生していないのではないかと思います。 通信が発生していない為、リクエストパラメータのGETが取得できないのではないかと思いました。
|
rmaeda |
投稿日時: 2019/7/9 14:22
対応状況: −−−
|
新米 登録日: 2019/7/9 居住地: 京都府 投稿: 3 |
Re: パラメータを指定した動的ブロックの呼び出し方 468さん
コメントありがとうございます。 ブロック用のコントローラーもカスタマイズしております。 それぞれのファイルを以下のように変更 1. src/Eccube/ControllerProvider/FrontControllerProvider.php $c->match('/block/sales_product/{id}', '\Eccube\Controller\Block\SalesProductController::index')->bind('block_sales_product')->assert('id', '\d+'); 2. src/Eccube/Controller/Block/SalesProductController.php public function index(Application $app, $id=null) {...} 3. 新規ページ内でのブロック呼び出し {{ render(path('block_sales_product', {'id': '100'})) }} ログを確認 1. site_xxxxxxx.log eccube.INFO [73b6b8f1] [bfd8b3bd] [NULL] [RouterListener:onKernelRequest:145] - Matched route "block_sales_product". {"route_parameters":{"_controller":"\\Eccube\\Controller\\Block\\SalesProductController::index","id":"100","_route":"block_sales_product"},"request_uri":"https://ドメイン名/block/sales_product/100"} [GET, /user_data/test_block, 153.133.199.188, NULL, Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36] 2. front_site_xxxxxx.log front.ERROR [73b6b8f1] [d1e3c456] [NULL] [LogListener:onKernelException:109] - Twig_Error_Runtime: An exception has been thrown during the rendering of a template ("Some mandatory parameters are missing ("id") to generate a URL for route "block_sales_product"."). (uncaught exception) at /var/www/xxxx/src/Eccube/Resource/template/default/block.twig line 28 {"exception":"[object] (Twig_Error_Runtime(code: 0): An exception has been thrown during the rendering of a template (\"Some mandatory parameters are missing (\"id\") to generate a URL for route \"block_sales_product\".\"). at /var/www/xxxx/src/Eccube/Resource/template/default/block.twig:28, Symfony\\Component\\Routing\\Exception\\MissingMandatoryParametersException(code: 0): Some mandatory parameters are missing (\"id\") to generate a URL for route \"block_sales_product\". at /var/www/xxxx/vendor/symfony/routing/Generator/UrlGenerator.php:151)"} [GET, /user_data/test_block, 153.133.199.188, NULL, Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36] https://ドメイン名/block/sales_product/100 id が正しく取れていない? idは正しく引き渡していると思うのですが、 何か他にアドバイスが有れば、よろしくおねがいします。 |
rmaeda |
投稿日時: 2019/7/9 15:47
対応状況: −−−
|
新米 登録日: 2019/7/9 居住地: 京都府 投稿: 3 |
Re: パラメータを指定した動的ブロックの呼び出し方 468さん
キャッシュが効いていたようで、クリアして再度確認したところ 修正した内容で、問題なく呼び出すことができました。 アドバイス、ありがとうございました。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |