バージョン選択

フォーラム

メニュー

オンライン状況

92 人のユーザが現在オンラインです。 (59 人のユーザが フォーラム を参照しています。)
登録ユーザ: 3
ゲスト: 89
helen456 printer9 saralee もっと...

サイト内検索

プラグイン > 開発について > ブロックのレンダリングイベントが呼ばれない

開発について

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
h_tanaka
投稿日時: 2019/5/27 14:36
対応状況: −−−
仙人
登録日: 2016/7/22
居住地: 愛媛県
投稿: 932
ブロックのレンダリングイベントが呼ばれない
EC-CUBE4.0.2

プラグインでカテゴリナビのブロックを変更するために、ブロックのレンダリングイベントでスニペットを追加しようとしたのですが、なぜか呼ばれません。

app/Plugin/tbsTest/Event.php
class Event implements EventSubscriberInterface
{
    /**
     * @return array
     */
    public static function getSubscribedEvents()
    {
        return [
            'Block/category_nav_pc.twig' => 'onRenderBlockCategoryNavPc',
        ];
    }

    /**
     * カテゴリナビ(PC)にカテゴリアイコンを表示する.
     *
     * @param TemplateEvent $event
     */
    public function onRenderBlockCategoryNavPc(TemplateEvent $event)
    {
echo "OK1";    // ★
        $event->addSnippet('@tbsTest/default/Block/category_nav_pc.twig');
echo "OK3";    // ★
    }
}


app/Plugin/tbsTest/Resource/template/default/Block/category_nav_pc.twig
OK2    {# ★ #}
{% set product_list = url('product_list') %}
{% for Category in Categories %}
    <script>
        $(function() {
            $('a[href="{{ product_list }}?category_id={{ Category.id }}"]').html(test{{ Category.name }});
        });
    </script>
{% endfor %}


上記の★の場所にデバッグ文を入れています。
カテゴリナビのあるページを表示すると、OK1とOK3は表示されるのですが、OK2が表示されません。
原因わかりますでしょうか?

なお、Product/list.twig などブロックでないページは呼べています。
もしかして4系ではControllerのないブロックはレンダリングイベントが呼べないのでしょうか?
468
投稿日時: 2019/5/28 9:20
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 1873
Re: ブロックのレンダリングイベントが呼ばれない
多分、Controllerが無いとテンプレートフックは発動しないと思います。
Controllerのrender()から処理される流れの中でテンプレートフックのイベントが実行されていると思います。

3系もそのような仕様だったと思います。


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

h_tanaka
投稿日時: 2019/5/28 9:32
対応状況: −−−
仙人
登録日: 2016/7/22
居住地: 愛媛県
投稿: 932
Re: ブロックのレンダリングイベントが呼ばれない
468さん

やはりそうですか。
ブロックのテンプレートを差し替えできないとなると、別の方法で実現するしかなさそうですね。。


----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

umebius
投稿日時: 2019/5/28 10:01
対応状況: −−−
登録日: 2016/7/22
居住地: 東京日本橋
投稿: 1343
Re: ブロックのレンダリングイベントが呼ばれない
4系ではブロック呼び出しの際にコントローラーがなくてもtwig->renderしているため
3系と違ってコントローラーがなくてもTemplateEventが呼ばれており"OK1"と"OK3"は出力されるのですが、addSnippetは動作しなさそうですね。

というのもブロック自体、default_frame.twigから呼び出しているので、その時点でaddSnipetしても反映されなさそうです(方法はあるかもしれませんが)


また、ページによってはTemplateEvent自体が発火しない問題もあるので、どのページでもコントトーラ無しブロックのTemplateEventが呼ばれるかは検証が必要そうです。
https://github.com/EC-CUBE/ec-cube/issues/4136


----------------
EC-CUBE3系4系 カスタマイズ ECのプロがシステム特急案件承ります。
公式インテグレートパートナー エンジニア募集中U-Mebius

h_tanaka
投稿日時: 2019/5/28 10:13
対応状況: −−−
仙人
登録日: 2016/7/22
居住地: 愛媛県
投稿: 932
Re: ブロックのレンダリングイベントが呼ばれない
umebius さん

default_frame.twigからの呼び出し時だとタイミング的に遅いということですね。

issue に追加させていただきました。
https://github.com/EC-CUBE/ec-cube/issues/4171


----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

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


 



ログイン


EC-CUBEペイメント

ec-cube.co

統計情報

総メンバー数は52,475名です
総投稿数は93,802件です

投稿数ランキング

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


ネットショップの壺

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

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