質問 > フロント機能 > フロントページの商品検索条件に追加したカスタム検索条件も維持したい(HIDDENフォームで配列受け取り) |
フロント機能
スレッド表示 | 古いものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
468 |
投稿日時: 2017/9/14 17:50
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: フロントページの商品検索条件に追加したカスタム検索条件も維持したい(HIDDENフォームで配列受け取り) 無事解決されたという事で良かったです。
わざわざ投稿、ありがとうございます。 私の方も勉強になりました。
|
mipon |
投稿日時: 2017/9/14 11:43
対応状況: 解決済
|
新米 登録日: 2017/9/9 居住地: 投稿: 9 |
Re: フロントページの商品検索条件に追加したカスタム検索条件も維持したい(HIDDENフォームで配列受け取り) 解決済みとさせていただきます。
|
mipon |
投稿日時: 2017/9/14 11:41
対応状況: −−−
|
新米 登録日: 2017/9/9 居住地: 投稿: 9 |
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/12 16:10
対応状況: −−−
|
新米 登録日: 2017/9/9 居住地: 投稿: 9 |
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自体も触るため、頭の中で整理できていない部分もあり、、、 もしどなたかその理由をご存知でしたら、ご教授くださればありがたいです<(_ _)> |
468 |
投稿日時: 2017/9/12 15:08
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: フロントページの商品検索条件に追加したカスタム検索条件も維持したい(HIDDENフォームで配列受け取り) 私もformで配列を扱う際、苦労した事があったのですが、
symfony2のformは仕様上、値には配列はセット出来ないのではないかと思っています。 (セレクトボックスもmultiple=trueとなると値がセットされなくなるのではないでしょうか?) CollectionFormというformオブジェクトを配列のような形で持てるものがあるのですが、 多分、それを利用するのがsymfonyの流儀なのではないかと思っています。 私も色々調べて、答えにたどりつけなかった為、 無理矢理区切り文字を入れて、文字列にしてhiddenに埋め込むようなやり方で対応しました・・・。
|
mipon |
投稿日時: 2017/9/11 22:26
対応状況: −−−
|
新米 登録日: 2017/9/9 居住地: 投稿: 9 |
フロントページの商品検索条件に追加したカスタム検索条件も維持したい(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せず。。。 数日悩んでおります。 どうぞよろしくお願いします<(_ _)> |
スレッド表示 | 古いものから | 前のトピック | 次のトピック | トップ |