バージョン選択

フォーラム

メニュー

オンライン状況

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

PR

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

サイト内検索

質問 > フロント機能 > フロントページの商品検索条件に追加したカスタム検索条件も維持したい(HIDDENフォームで配列受け取り)

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
mipon
投稿日時: 2017/9/11 22:26
対応状況: −−−
新米
登録日: 2017/9/9
居住地:
投稿: 5
フロントページの商品検索条件に追加したカスタム検索条件も維持したい(HIDDENフォームで配列受け取り)
フロントページの、商品検索条件に追加したカスタム検索条件も一緒に維持したい(HIDDENフォームで配列受け取り)

【ECCUBE3.0.14】
※ECCUBE自体もプラグインもSymfonyも、当方初めての使用です。


フロントページで商品検索する際に、
①デフォルトの「カテゴリ」「テキスト」に加えて、
カスタマイズした項目「term_a」「term_b」でも絞込検索できるようにしました。

②次の「検索条件を維持」のステップではまっています。
(例えば表示件数や並び順を変更するなどして、再度検索ボタンを押した際、条件がデフォルトに戻らないように維持したい)

検索条件を維持するHIDDENフォームで、
セレクトボックス(他、ラジオボタン・テキスト)は成功するのですが、
解決できないのは、チェックボックスのmultiple複数条件の場合で、検索で送られた配列データをHIDDENフォームで受け取れません。




【具体例】
①デフォルトの「カテゴリ」「テキスト」に加えて、カスタマイズ検索条件「term_a」「term_b」でも、商品を絞込検索
 <Typeの追加部分>
   src\Eccube\Form\Type\SearchProductBlockType.php
   に下記を追加
   (実際にはプラグイン側でフックポイントでイベントにて下記を追加)
 
   // セレクトボックス
   $builder->add('plg_term_a', 'entity', array(
     'class' => 'Plugin\プラグイン名\Entity\Term',
     'property' => 'NameWithLevel',
     'label' => 'テーマA',
     'required' => false,
     'placeholder' => '選択なし',
     'multiple' => false,
     'expanded' => false,
     'mapped' => true,
     'choices' => $TermListA,
   ));
 
   // チェックボックス
   $builder->add('plg_term_b', 'entity', array(
     'class' => 'Plugin\ProductTagPlusSearch\Entity\Tagplus',
     'property' => 'NameWithLevel',
     'label' => 'テーマB',
     'required' => false,
     'placeholder' => '選択なし',
     'multiple' => true,
     'expanded' => true,
     'mapped' => true,
     'choices' => $TermListB,
   ));
 
 ~~~ここまでは成功~~~

②検索条件を維持
 カスタマイズ検索条件「term_a」「term_b」の選択状態を維持したく、
 <Typeの追加部分>
   \src\Eccube\Form\Type\SearchProductType.php
   に下記を追加
   (実際にはプラグイン側で、「FRONT_PRODUCT_INDEX_SEARCH」フックポイントでイベントにて追加)
 
   // セレクトボックス
   $builder->add('plg_term_a', 'entity', array(
     'class' => 'Plugin\プラグイン名\Entity\Term',
     'property' => 'NameWithLevel',
     'label' => 'テーマA',
     'required' => false,
     'placeholder' => '選択なし',
     'empty_value' => null,
     'empty_data' => null,
     'multiple' => false,
     'expanded' => false,
     'mapped' => true,
     'choices' => $TermListA,
   ));
 
   // チェックボックス
   $builder->add('plg_term_b', 'entity', array(
     'class' => 'Plugin\ProductTagPlusSearch\Entity\Tagplus',
     'property' => 'NameWithLevel',
     'label' => 'テーマB',
     'required' => false,
     'placeholder' => '選択なし',
     'empty_value' => null,
     'empty_data' => null,
     'multiple' => true,
     'expanded' => true,
     'mapped' => true,
     'choices' => $TermListB,
   ));



 ~~~ ここで検索時に問題発生(エラーは出ない)~~~
<<チェックボックスの場合、value値を受け取れない>>

  HIDDENフォーム
  <form name="form1" id="form1" method="get" action="?">
    ~省略~
    <input type="hidden" value="32" id="plg_term_a" name="plg_term_a"> ← セレクトボックスは成功!
    <input type="hidden" value="Doctrine\Common\Collections\ArrayCollection@000000007df5db3b000000001cdd9719"; id="plg_term_b" name="plg_term_b">
     ↑ チェックボックス受け取れない! name="plg_term_b"も配列仕様にならない...
  </form>

 このように、
 セレクトボックスの場合は値を受け取れているのですが、
 チェックボックスで配列の場合は受け取れません。

 検索時のURLのGETパラメータは以下のような感じです。
  /products/list?plg_term_a=2&plg_term_b[]=5&plg_term_b[]=6&mode=&name=&category_id=7&pageno=1&disp_number=30&orderby=

 
 HIDDENフォームで配列を受け取る方法を調べたのですが、なかなかHITせず。。。
 数日悩んでおります。
 どうぞよろしくお願いします<(_ _)>
468
投稿日時: 2017/9/12 15:08
対応状況: −−−
仙人
登録日: 2008/10/26
居住地:
投稿: 712
Re: フロントページの商品検索条件に追加したカスタム検索条件も維持したい(HIDDENフォームで配列受け取り)
私もformで配列を扱う際、苦労した事があったのですが、
symfony2のformは仕様上、値には配列はセット出来ないのではないかと思っています。
(セレクトボックスもmultiple=trueとなると値がセットされなくなるのではないでしょうか?)
CollectionFormというformオブジェクトを配列のような形で持てるものがあるのですが、
多分、それを利用するのがsymfonyの流儀なのではないかと思っています。

私も色々調べて、答えにたどりつけなかった為、
無理矢理区切り文字を入れて、文字列にしてhiddenに埋め込むようなやり方で対応しました・・・。


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

mipon
投稿日時: 2017/9/12 16:10
対応状況: −−−
新米
登録日: 2017/9/9
居住地:
投稿: 5
Re: フロントページの商品検索条件に追加したカスタム検索条件も維持したい(HIDDENフォームで配列受け取り)
素早い投稿を本当にありがとうございます!
そうなのですね、、、私もこの投稿で解答を得られなければ、
区切り文字のテキスト形式で配列を送るしかないな、、、と思いながら、
よりスマートな方法の興味から、最終手段の質問でした(;^_^A
ありがとうございます。


※ちなみに、、、「検索条件を維持する」仕組みとしては、
Controllerの下記部分から、フォームがHIDDENフォームとなって検索条件を維持しているのではないかと思います。
 <Controllerの部分>
   src\Eccube\Controller\ProductController.php
      ~省略~
      // searchForm
      /* @var $builder \Symfony\Component\Form\FormBuilderInterface */
      $builder = $app['form.factory']->createNamedBuilder('', 'search_product');
      $builder->setAttribute('freeze', true);
      $builder->setAttribute('freeze_display_text', false);
      if ($request->getMethod() === 'GET') {
        $builder->setMethod('GET');
      }
      ~省略~
 
 やってみたテストとして、上記から次の2行を削除すると、、、
 - $builder->setAttribute('freeze', true);
 - $builder->setAttribute('freeze_display_text', false);

 すると、HIDDENフォームではなくなりFORMが表示され、問題のチェックボックス配列データも受け取れるようになります。
 
 その流れで、「HIDDENフォームで配列を受け取る方法」という線で調べていました。

 ご指南いただいた「CollectionForm」についても調べてみようと思います!
 ただ、「HIDDENフォーム」にした途端受け取れない、というところとの関連が、
 初めてSymfony自体も触るため、頭の中で整理できていない部分もあり、、、
 もしどなたかその理由をご存知でしたら、ご教授くださればありがたいです<(_ _)>
mipon
投稿日時: 2017/9/14 11:41
対応状況: −−−
新米
登録日: 2017/9/9
居住地:
投稿: 5
Re: フロントページの商品検索条件に追加したカスタム検索条件も維持したい(HIDDENフォームで配列受け取り)
一旦、自己解決できました。

上記の、
②検索条件を維持
のところで、

 カスタマイズ検索条件「term_a」「term_b」の選択状態を維持したく、
 <Typeの追加部分>
   \src\Eccube\Form\Type\SearchProductType.php
   に下記を追加
 
   // セレクトボックス
   $builder->add('plg_term_a', 'entity', array(
     'class' => 'Plugin\プラグイン名\Entity\Term',
     'property' => 'NameWithLevel',
     'label' => 'テーマA',
     'required' => false,
     'placeholder' => '選択なし',
     'empty_value' => null,
     'empty_data' => null,
     'multiple' => false,
     // 'expanded' => false,
     'mapped' => true,
     // 'choices' => $TermListA,
   ));
 
   // チェックボックス
   $builder->add('plg_term_b', 'entity', array(
     'class' => 'Plugin\ProductTagPlusSearch\Entity\Tagplus',
     'property' => 'NameWithLevel',
     'label' => 'テーマB',
     'required' => false,
     'placeholder' => '選択なし',
     'empty_value' => null,
     'empty_data' => null,
     'multiple' => true,
     // 'expanded' => true,
     'mapped' => true,
     // 'choices' => $TermListB,
   ));

すみません、Easyミスで簡単なことでした。。。<(_ _)>
オプション配列から、
- 'expanded' => 〇〇,
- 'choices' => $TermList〇,
の2つをコメントアウトで、チェックボックス配列も受け取ることができました。
HIDDENフォームなので上記2つは要らないですよね。

お騒がせしましたが、
468さまの貴重な経験談が他でも役に立ちました。
ありがとうございました<(_ _)>
mipon
投稿日時: 2017/9/14 11:43
対応状況: 解決済
新米
登録日: 2017/9/9
居住地:
投稿: 5
Re: フロントページの商品検索条件に追加したカスタム検索条件も維持したい(HIDDENフォームで配列受け取り)
解決済みとさせていただきます。
468
投稿日時: 2017/9/14 17:50
対応状況: −−−
仙人
登録日: 2008/10/26
居住地:
投稿: 712
Re: フロントページの商品検索条件に追加したカスタム検索条件も維持したい(HIDDENフォームで配列受け取り)
無事解決されたという事で良かったです。
わざわざ投稿、ありがとうございます。
私の方も勉強になりました。


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

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

 



ログイン


EC-CUBEペイメント

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

統計情報

総メンバー数は20,136名です
総投稿数は82,934件です

投稿数ランキング

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


ネットショップの壺

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

Copyright© LOCKON CO.,LTD. All Rights Reserved.