質問 > フロント機能 > 検索窓のカテゴリー選択について |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
ljue |
投稿日時: 2020/5/25 12:17
対応状況: −−−
|
半人前 登録日: 2020/4/20 居住地: 投稿: 14 |
検索窓のカテゴリー選択について ECCUBE4系で、商品検索の検索窓(search_product.twig)の横にあるカテゴリー一覧について、表示するカテゴリーをある特定のものだけにして、プルダウンでの表示ではなくラジオボタンの表示に切り替えたいです。
イメージとしては、以下のような形です。 [現在] 全ての商品▼ カテゴリーA カテゴリーB カテゴリーC カテゴリーD 現在は一番上の「全ての商品」をクリックすると下のカテゴリー一覧が表示される仕様になっているかと思いますが、これを… [実装イメージ] 〇全ての商品 〇カテゴリーA 〇カテゴリーB のように、ラジオボタン形式にして横に並べ、かつこちらで表示したいカテゴリーのみ表示する形にしたいです。 (最初は「全ての商品」にチェックが入っている状態にもしたいです) どうすれば上記の実装が可能か教えていただきたいです。 |
468 |
投稿日時: 2020/5/26 0:35
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: 検索窓のカテゴリー選択について /src/Eccube/Form/Type/SearchProductBlockType.phpの中で
選択肢となるカテゴリの配列とformTypeの定義をしていると思います。 $Categoriesの配列の内容を制御すれば選択肢の内容は調整出来ると思います。 ラジオボタンへの変更は以下のsymfonyのドキュメントにあるようにexpandedとmultipleの組み合わせでselectタグからradioボタンに変更できると思います。 https://symfony.com/doc/current/reference/forms/types/entity.html#select-tag-checkboxes-or-radio-buttons
|
ljue |
投稿日時: 2020/5/26 11:25
対応状況: −−−
|
半人前 登録日: 2020/4/20 居住地: 投稿: 14 |
Re: 検索窓のカテゴリー選択について ご返答いただきありがとうございます。
早速ご提示いただいたリンクに記載されている内容を参考にラジオボタンへの変更を試みたのですが、プルダウンのまま表示が変わらない状態です… 試したコードは以下の通りです。 $builder->add('category_id', ChoiceType::class, [ 'class' => 'Eccube\Entity\Category', 'choice_label' => 'NameWithLevel', 'choices' => $Categories, 'required' => true, 'multiple' => false, 'expanded' => true, ]); どこか間違っている箇所がありますでしょうか…? また、$Categoriesの選択肢の制御ですが、ご教示いただいた箇所は SearchProductBlockType.phpの中の $Categories = $this->categoryRepository ->getList(null, true); というコードの部分かと思いますが、こちらは /src/Eccube/Entity/Category.php で管理・変更することができるのかなと思いますが、具体的にどのようなコードを記述すれば特定のカテゴリーだけ表示できるのかが分からない状況です… たとえば、ラジオボタンで 〇全ての商品(←デフォルトで表示されるplaceholderです) 〇カテゴリーA (←カテゴリーIDは「1」と仮定) の2つのみ表示したい場合、Category.phpにどのようなコードを記述すれば実装できますでしょうか? ヒントだけでもご教示いただけますと幸いです。 素人質問で大変恐縮ですが、何卒よろしくお願いいたします。 |
468 |
投稿日時: 2020/5/27 11:18
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: 検索窓のカテゴリー選択について デフォルトの環境でソースをコピーして試してみましたが
radioボタンに変わりました。 確認なのですが商品検索の部分は「商品検索ブロック」を利用されていますか? あと、管理画面>コンテンツ管理でキャッシュを削除してみてください。 >$Categories = $this->categoryRepository->getList(null, true); こちらは /src/Eccube/Repository/CategoryRepository.php function getList() が実行されています。 function getList()は他の箇所でも利用されている為、 直接変更すると影響が大きい為、 SearchProductBlockType.phpで $Categoriesの配列を必要なカテゴリだけに作り直せばよいと思います。
もちろんfunction getList()をコピーして新しいメソッドを作ってそれを利用する形でも良いかと思います。 >〇全ての商品(←デフォルトで表示されるplaceholderです) あと、私が試してみた範囲では、 ラジオボタンにした時に全ての商品という選択肢を表示させる方法はよく分かりませんでした。
|
ljue |
投稿日時: 2020/5/28 11:52
対応状況: −−−
|
半人前 登録日: 2020/4/20 居住地: 投稿: 14 |
Re: 検索窓のカテゴリー選択について ご教示いただきありがとうございます。
無事radioボタンに変更できました。前回radioボタンに変更できなかった原因は、間違ってSearchProductType.phpを修正していた為でした…。失礼しました。 また、ご教示いただいたコードによって、$Categoriesの配列を必要なカテゴリだけ作り直すことができました。ありがとうございました。 「全ての商品」の表示については、私の方でも色々と調べてみたのですが解決策を見つけることが出来ませんでした。とりあえず今回は、カテゴリーの最上位に「全ての商品」カテゴリーを設置し、そのカテゴリーIDを上記コードで設定することで対応しようかと思います。 それで、大変恐縮なのですが、あと2点だけ追加でお聞きしたいことがあります。 ご教示頂いたコードでradioボタンを表示させたところ、特にCSSを変更したワケではないのですが、ボタンの形がテキストエリアのような長方形で表示されてしまい、クリックするとボタンの中にチェックが入らず、ボタンの枠の色(border-color)が変わるような形になっています。 そのため、ボタンを丸い形に変更し、クリックしたときにボタンの中に黒丸が表示されるようにしたいです。(radioボタンといえばそのような仕様が一般的かと思うので…)。 このあたりの設定は、SearchProductBlockType.php内などで設定するものではなく、CSSを書いて対応することになるのでしょうか? また、たとえば、 $NewCategories = array(); foreach ($Categories as $Category) { if ($Category->getId() == 1) { $NewCategories[] = $Category; } else if ($Category->getId() == 2) { $NewCategories[] = $Category; } } $Categories = $NewCategories; 上記のコードを実装してカテゴリーIDが1と2のカテゴリーを表示させた場合、最初は1の方のradioボタンにだけチェックが入った(checkedで選択された)状態にしたいです。色々と調べてみたのですが、自力では分からずの状況です…。 すみませんが、上記2点だけご教示いただけないでしょうか。 何卒よろしくお願いいたします。 |
ljue |
投稿日時: 2020/6/5 11:22
対応状況: 解決済
|
半人前 登録日: 2020/4/20 居住地: 投稿: 14 |
Re: 検索窓のカテゴリー選択について こちら、CSSを設定し直すこで対応できました。
ご回答いただき大変助かりました。ありがとうございました。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |