質問 > フロント機能 > 検索をかけた際にある特定のカテゴリに属する商品は検索されない様にしたいです。 |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
andez |
投稿日時: 2014/6/26 4:35
対応状況: −−−
|
常連 登録日: 2013/5/24 居住地: 投稿: 35 |
検索をかけた際にある特定のカテゴリに属する商品は検索されない様にしたいです。 お世話になっております。
検索窓からキーワードを入力し、検索をかけた際にある特定のカテゴリに属する商品は検索されない様にする必要が事情により発生し、以下のスレッドを見つけ、試しておりましたが、エラーはでないものの、全てのカテゴリの商品を検索してしまいます。 http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=13155&forum=10&post_id=60310#forumpost60310 何か打開策とはありますでしょうか。お分かりの方がいらっしゃいましたらアドバイスを頂ければ幸いです。 EC-CUBE 2.12.5 (データベース) MySQL5.0.77 (WEBサーバ) apache2 (OS) Windows XP (PHP) 5.0.22 |
tsuji |
投稿日時: 2014/6/26 9:24
対応状況: −−−
|
仙人 登録日: 2013/11/19 居住地: 投稿: 958 |
Re: 検索をかけた際にある特定のカテゴリに属する商品は検索されない様にしたいです。 andez 様
特定のカテゴリのみを検索しないのであれば、 検索条件に特定のカテゴリ以外を追加するのが よいと思いますが、 特定のカテゴリとそれ以下の階層のカテゴリを検索しない のであれば、data\class\helper\SC_Helper_DB.phpの sfGetCatWhereを参考に検索条件にcategory_idをNOT IN で加えてみてはいかがでしょうか?
|
andez |
投稿日時: 2014/6/27 15:29
対応状況: −−−
|
常連 登録日: 2013/5/24 居住地: 投稿: 35 |
Re: 検索をかけた際にある特定のカテゴリに属する商品は検索されない様にしたいです。 Tsuji様
ご教授頂きまして感謝致します。いろいろと試しておりましたが、 具体的にはあるカテゴリに属する商品(孫カテゴリcategory_idの40以上56以下、あるいは子カテゴリcategory_id =10)を検索をかけた時に非表示にしたい場合、以下の記述の様に試すと画面が真っ白になります。 方向性、記述上の問題点などご教授頂けませんでしょうか。 SC_Helper_DB.php function sfGetCatWhere($category_id) { // 子カテゴリIDの取得 $arrRet = SC_Helper_DB_Ex::sfGetChildrenArray('dtb_category', 'parent_category_id', 'category_id', $category_id); $where = 'category_id NOT IN 10'; return array($where, $arrRet); } |
tsuji |
投稿日時: 2014/6/30 10:35
対応状況: −−−
|
仙人 登録日: 2013/11/19 居住地: 投稿: 958 |
Re: 検索をかけた際にある特定のカテゴリに属する商品は検索されない様にしたいです。 andez 様
> 具体的にはあるカテゴリに属する商品(孫カテゴリcategory_idの40以上56以下、あるいは子カテゴリcategory_id =10)を検索をかけた時に非表示にしたい場合、以下の記述の様に試すと画面が真っ白になります。 10のカテゴリの子カテゴリの商品も検索結果に出てきてほしく いということですよね? sfGetCatWhereでは、$category_idと$category_idの子のカテゴ リを取得して、そこから商品を取得できるようにSQLの条件文を返 しています。 SC_Helper_DB_Ex::sfGetChildrenArrayで子のカテゴリIDを取得しています。 sfGetCatWhere自体は商品検索で使うので、別途下記のように sfGetCatWhereをコピーして関数を作るのがよいかと思います。 /** * カテゴリから商品を検索しない場合のWHERE文と値を返す. * * @param integer $category_id カテゴリID * @return array 商品を検索する場合の配列 */ function sfNotGetCatWhere($category_id) { // 子カテゴリIDの取得 $arrRet = SC_Helper_DB_Ex::sfGetChildrenArray('dtb_category', 'parent_category_id', 'category_id', $category_id); $where = 'category_id NOT IN (' . SC_Utils_Ex::repeatStrWithSeparator('?', count($arrRet)) . ')'; return array($where, $arrRet); } そして、商品の検索条件に新たに作成した検索条件を加えるのが よいかと思います。
|
andez |
投稿日時: 2014/6/30 22:59
対応状況: −−−
|
常連 登録日: 2013/5/24 居住地: 投稿: 35 |
Re: 検索をかけた際にある特定のカテゴリに属する商品は検索されない様にしたいです。 Tsuji様
大変お世話になっております。またご教授頂きまして感謝いたします。 SC_Helper_DB.phpをtsuji様から頂きました記述に置き換えた後、 “そして、商品の検索条件に新たに作成した検索条件を加えるのが よいかと思います。” とは、LC_Page_Products_List.php内の記述を以下のように変更することだと考え(これしか相当のものが見つかりませんでしたので)試しておりました。が、Unknown column ' alldtl.category_id ' in 'where clause というエラーがlogファイルに吐き出されます。 // 商品検索条件の作成(未削除、表示) $searchCondition['where'] = 'alldtl.del_flg = 1 AND alldtl.status = 0 AND alldtl.category_id = 10'; Sc_product.phpのalldtlにはcategory_idが存在しますので、unknown columnというエラーがなぜでるのか分からないでおります。 申し訳ございませんが、どこが間違っていると思われますでしょうか。 |
yuh |
投稿日時: 2014/7/1 2:31
対応状況: −−−
|
神 登録日: 2013/1/9 居住地: 大阪 投稿: 1819 |
Re: 検索をかけた際にある特定のカテゴリに属する商品は検索されない様にしたいです。 alldtlにはcategory_idが存在しません。
LC_Page_Products_List.php の
ここに書いてあるようにcategory_idで検索をかけるのであれば、dtb_product_categoriesからtsuji様の記述されているsfNotGetCatWhereからカテゴリIDを取り、データがあるのであればNOT EXISTSでチェックするように使用すればいいと思います。
このように記述するのであれば、
このように書いた方がいいと思います。 おそらくやりたいのは
こんな感じだとは思いますが。 |
andez |
投稿日時: 2014/7/1 4:16
対応状況: 解決済
|
常連 登録日: 2013/5/24 居住地: 投稿: 35 |
Re: 検索をかけた際にある特定のカテゴリに属する商品は検索されない様にしたいです。 Yuh様 Tsuji様
できました。 ご教授いただき感謝いたします。ありがとうございます。 具体的には子カテゴリ10、孫カテゴリ40以上56以下の場合(子カテゴリ10に属する孫カテゴリ40以上56以下を非表示にしたい)、以下の設定で思い通りに抽出すると思われます。(後で問題が発生してくるかどうかは分かりませんが) $searchCondition['where'] = 'alldtl.del_flg = 0 AND alldtl.status = 1 AND NOT EXISTS(SELECT * FROM dtb_product_categories WHERE product_id = alldtl.product_id AND category_id < 57 and category_id > 39)'; いずれにせよ、本当にありがとうございます。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |