バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

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

開発について

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
h_tanaka
投稿日時: 2017/6/14 18:11
対応状況: 解決済
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1610
受注登録の商品追加で拡張した検索条件をイベントで拾えない
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 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

468
投稿日時: 2017/6/14 21:37
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
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
居住地: 宮城県(2017/09末引退)
投稿: 156
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
居住地: 愛媛県
投稿: 1610
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の機能やデザインのカスタマイズ承ります。

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


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,306名です
総投稿数は109,692件です

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1568
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

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

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