バージョン選択

フォーラム

メニュー

オンライン状況

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

PR

デザインテンプレート EC-CUBE3.0版が登場!
広告掲載について

サイト内検索

プラグイン > 開発について > 受注登録の商品追加で拡張した検索条件をイベントで拾えない

開発について

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
h_tanaka
投稿日時: 2017/6/14 18:11
対応状況: 解決済
仙人
登録日: 2016/7/22
居住地: 愛媛県
投稿: 306
受注登録の商品追加で拡張した検索条件をイベントで拾えない
EC-CUBE3.0.14

管理画面の受注登録ページにおいて、「商品の追加」モーダルに検索フォームを追加しようとしているのですが、検索機能がうまく実装できません。

まず、検索フォームの拡張により、検索項目を追加で表示することはできました。

app/Plugin/Test/Form/Extension/Admin/SearchProductTypeExtension.php
class SearchProductTypeExtension extends AbstractTypeExtension
{
    public $app;

    public function __construct($app)
    {
        $this->app = $app;
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $app = $this->app;
        if (!$app->isGranted('ROLE_ADMIN')) {
            return;
        }

        // フォームを追加するためにイベントリスナーを追加
       $builder->addEventListener(FormEvents::POST_SET_DATA, function (FormEvent $event) use ($app) {

            $choices = array();

            // 選択肢追加
            $form = $event->getForm();
            $form->add('plg_test_id', 'choice', array(
                'mapped' => true,
                'required' => false,
                'choices' => $choices,
                'empty_value' => '選択してください',
            ));
       });
    }

    public function getExtendedType()
    {
        return 'admin_search_product';
    }
}


しかし、「検索」ボタンをクリックしたときのイベントにて、設定した項目 plg_test_id が取得できません。

app/Plugin/Test/event.yml
# 追加商品検索
admin.order.edit.search.product.search:
    - [onAdminProductIndexSearch, NORMAL]


app/Plugin/Test/Event.php
    public function onAdminProductIndexSearch(EventArgs $event)
    {
        $app = $this->app;
        if (!$app->isGranted('ROLE_ADMIN')) {
            return;
        }

        $searchData = $event->getArgument('searchData');
        if (empty($searchData)) {
            return;
        }
var_dump($searchData);  // ★plg_test_id が設定されていない

        $request = $event->getRequest();
        if ($request) {
            $searchData['plg_test_id'] = $request->get('plg_test_id');
        }
var_dump($request);  // ★plg_test_id が設定されていない
die('OK');

        ...

    }


src/Eccube/Controller/Admin/Order/EditController.php
の EccubeEvents::ADMIN_ORDER_EDIT_SEARCH_PRODUCT_SEARCH イベント前の処理を見る限り、$searchData は作成し直されているため項目 plg_test_id
が設定されていないのはわかったのですが、なぜか $request にも設定されていないようです。
拡張フォームにて設定した項目 plg_test_id をイベント側で取得するにはどうすればよいでしょうか?


----------------
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

468
投稿日時: 2017/6/14 21:37
対応状況: −−−
仙人
登録日: 2008/10/26
居住地:
投稿: 630
Re: 受注登録の商品追加で拡張した検索条件をイベントで拾えない
/src/Eccube/Resource/template/admin/Order/edit.twig 105行目に
商品検索のajax通信の処理が記述されており、
そこでサーバへ渡すパラメータを以下のように固定的に記述しているようです。
data: {
    'id' : $('#admin_search_product_id').val(),
    'category_id' : $('#admin_search_product_category_id').val()
},


twigのテンプレートフックポイントで
javascriptを書き換えれば対応できるかと思います。


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

hata
投稿日時: 2017/6/14 21:38
対応状況: −−−
一人前
登録日: 2015/8/3
居住地: 宮城県
投稿: 141
Re: 受注登録の商品追加で拡張した検索条件をイベントで拾えない
src/Eccube/Resource/template/admin/Order/edit.twig を見ると検索処理はajaxでやられているようでした。
なのでajaxから送るデータにもplg_test_idを追加してやらないといけないですね。
具体的には下記のコードが必要になるので、
        $.ajax({
            type: 'POST',
            dataType: 'html',
            data: {
                'id' : $('#admin_search_product_id').val(),
                'category_id' : $('#admin_search_product_category_id').val(),★","をつけて
                'plg_test_id' : $('#admin_search_product_plg_test_id').val()★これを追加
            },
            url: '{{ url('admin_order_search_product') }}',
            success: function(data) {
                // モーダルに結果を書き出し.
                $('#searchProductModalList').html(data);
            },
            error: function() {
                alert('search product failed.');
            }
        });
フックしてやってtwigの中身を書き変えてやれば$requestに入ってくると思います。

試しに src/Eccube/Resource/template/admin/Order/edit.twig に上記★を追加して裏をとってから
replaceの処理を実装してみてください。
h_tanaka
投稿日時: 2017/6/15 9:22
対応状況: −−−
仙人
登録日: 2016/7/22
居住地: 愛媛県
投稿: 306
Re: 受注登録の商品追加で拡張した検索条件をイベントで拾えない
468さん
hataさん

ありがとうございます!
ajaxだからtwig内のjsからリクエストされているのすっかり失念していました。
呼び元考えれば難しいことでもないのに、気づかないっていうのは怖いですね。。

次の実装で解決しました。

event.yml
Admin/Order/edit.twig:
    - [onRenderAdminOrderEdit, NORMAL]


Event.php
    /**
     * 受注登録ページで店舗検索情報をajaxリクエストに渡す.
     *
     * @param TemplateEvent $event
     */
    public function onRenderAdminOrderEdit(TemplateEvent $event)
    {
        $source = $event->getSource();

        $search = "'category_id' : $('#admin_search_product_category_id').val()";
        $replace = $search.",'plg_test_id' : $('#admin_search_product_plg_test_id').val()";
        $source = str_replace($search, $replace, $source);

        $event->setSource($source);
    }


----------------
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

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

 



ログイン


EC-CUBEペイメント

クレジットカード情報の非保持化対応

統計情報

総メンバー数は19,766名です
総投稿数は82,463件です

投稿数ランキング

1
seasoft
7331
2
AMUAMU
2712
3
nanasess
1632
4
yuh
1389
5
red
1064
6
fukap
907
7
shutta
827
8 ramrun 789
9
tsuji
784
10
umebius
712
11
tao_s
651
12 sumida 638
13
homan
633
14
468
630
15 karin 609
16 DELIGHT 571
17
patapata
502
18
flealog
483
19 tonton 436
20
ecbg
387


ネットショップの壺

EC-CUBEガイドブック
Copyright© LOCKON CO.,LTD. All Rights Reserved.