バージョン選択

フォーラム

メニュー

オンライン状況

76 人のユーザが現在オンラインです。 (56 人のユーザが フォーラム を参照しています。)
登録ユーザ: 3
ゲスト: 73
kmorita muahangn takashi.s もっと...

サイト内検索

質問 > フロント機能 > 商品一覧で子カテゴリにいる際にその親カテゴリからの表示を保ちたい

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ptqa10
投稿日時: 2017/3/26 19:10
対応状況: −−−
新米
登録日: 2017/3/26
居住地:
投稿: 5
商品一覧で子カテゴリにいる際にその親カテゴリからの表示を保ちたい
▼テンプレート
[EC-CUBE]2.13.5
[レンタルサーバ]エックスサーバ
[OS]Linux
[PHP]5.6.24
[データベース]MySQL 5.7.16
[WEBサーバ]Apache
[導入プラグインの有無]なし
[カスタマイズの有無]eccube-bootstrapテンプレートを使用
商品一覧ページにて、カテゴリを選択した際に
http://sachips.byeto.jp/eccube/eccube-products-list-sabcat.html
こちらを参考にサブカテゴリを表示した。
が、サブカテゴリに移動するとカテゴリ表示が消えてしまうので、サブカテゴリに移動した際にも、今いる子カテゴリの親カテゴリからのカテゴリ表示をしたい。
色々なサイトを見たり、classをいじってみたが自力では難しいと判断し、こちらでお力を借りようと思いました。
何卒よろしくお願いいたします。
468
投稿日時: 2017/3/27 10:50
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: 商品一覧で子カテゴリにいる際にその親カテゴリからの表示を保ちたい
親カテゴリの一覧を表示したいという事でしょうか?
それとも同じ階層のカテゴリの一覧を表示したいという事でしょうか?


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

ptqa10
投稿日時: 2017/3/27 11:27
対応状況: −−−
新米
登録日: 2017/3/26
居住地:
投稿: 5
Re: 商品一覧で子カテゴリにいる際にその親カテゴリからの表示を保ちたい
468さま
書き込みありがとうございます。
言葉足らずで申し訳ございません。

親カテゴリ(1)
-子カテゴリ(6)
-子カテゴリ(7)
-子カテゴリ(8)
-子カテゴリ(9)
親カテゴリ(2)
-子カテゴリ(10)
-子カテゴリ(11)
-子カテゴリ(12)
-子カテゴリ(13)

のようになっています。
上記の子カテゴリ(11)を開いている際に
親カテゴリ(2)
-子カテゴリ(10)
-子カテゴリ(11)
-子カテゴリ(12)
-子カテゴリ(13)
を表示していたい。
と言うことです。

よろしくお願いいたします。
ptqa10
投稿日時: 2017/3/27 21:03
対応状況: −−−
新米
登録日: 2017/3/26
居住地:
投稿: 5
Re: 商品一覧で子カテゴリにいる際にその親カテゴリからの表示を保ちたい
http://ec-cube.nakweb.com/blog/827.html
こちらのサイトも拝見させていただき、他の投稿も調べたのですが、
先ほど投稿したような動きはしてくれず、
子カテゴリを開いている状態では、現在開いているカテゴリの親カテゴリからの子カテゴリ一覧を表示するには至りませんでした。

    /**
     * 選択中のカテゴリIDを取得する.
     *
     * @param  array $arrRequest リクエスト配列
     * @return array $arrCategoryId 選択中のカテゴリID
     */
    public function lfGetSelectedCategoryId($arrRequest)
    {
            // 商品ID取得
        $product_id = '';
        if (isset($arrRequest['product_id']) && $arrRequest['product_id'] != '' && is_numeric($arrRequest['product_id'])) {
            $product_id = $arrRequest['product_id'];
        }
        // カテゴリID取得
        $category_id = '';
        if (isset($arrRequest['category_id']) && $arrRequest['category_id'] != '' && is_numeric($arrRequest['category_id'])) {
            $category_id = $arrRequest['category_id'];
        }
        // 親カテゴリID取得
        $parent_category_id = '';
		//インスタンス生成
		$objQuery = new SC_Query();
		//LIMIT句を指定 取得する件数
		$col = "*"; //カラム
		$table = "dtb_category"; //テーブル名
		$where = "category_id = ?"; //where句
		$switch_data = array($category_id); //配列で入れないといけないので注意
		$res = $objQuery->select($col,$table,$where,$switch_data);

		$parent_category_id = $res['parent_category_id'];
		
		//親カテゴリならば何もしない
		if ($parent_category_id == 0){
			$category_id = $category_id;
		}else{
			$category_id = $parent_category_id;
		}
        // 選択中のカテゴリIDを判定する
        $objDb = new SC_Helper_DB_Ex();
        $arrCategoryId = $objDb->sfGetCategoryId($product_id, $category_id);
        if (empty($arrCategoryId)) {
            $arrCategoryId = array(0);
        }

        return $arrCategoryId;
    }

このような書き方をして、親カテゴリIDを取得して、リンク先に記述されているように

/**
 * カテゴリツリーの取得
 *
 * @param array $parent_category_id 親カテゴリID
 * @param boolean $count_check 登録商品数をチェックする場合はtrue
 * @return array $arrRet カテゴリツリーの配列を返す
 */
function lfGetCatTree($parent_category_id, $count_check = true) {
        $objQuery =& SC_Query_Ex::getSingletonInstance();
        $objDb = new SC_Helper_DB_Ex();
        $col = '*';
        $from = 'dtb_category left join dtb_category_total_count ON dtb_category.category_id = dtb_category_total_count.category_id';
        // 登録商品数のチェック
        if ($count_check) {
                $where = 'del_flg = 0 AND product_count > 0 AND parent_category_id = ?';
        } else {
                $where = 'del_flg = 0 AND parent_category_id = ?';
        }
        $arrval = array($parent_category_id);
        $objQuery->setOption('ORDER BY rank DESC');
        return $objQuery->select($col, $from, $where, $arrval);
}

に渡して結果を受け取り、tplで表示なども行ったのですが上手く動きませんでした。

何卒、お力をお貸しください。
よろしくお願いいたします。
468
投稿日時: 2017/3/31 10:02
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: 商品一覧で子カテゴリにいる際にその親カテゴリからの表示を保ちたい
複数の処理を追加する事になると思いますので、1つ1つ確認されたほうが確実かと思います。

以下の3点、順番に確認して、どこに問題があるかまずは切り分けてみては如何でしょうか?

1.lfGetSelectedCategoryId()の結果がきちんと取得できているか?
子カテゴリを表示した時に親カテゴリのIDが取得できていますか?

2.lfGetCatTree()の結果が指定したカテゴリの子カテゴリの配列が取得できているか?
指定したカテゴリIDの子カテゴリは取得できていますか?

3.tpl側が受け取った子カテゴリの配列をきちんと出力できているか?

参考サイト等を見てみると、どの記述も問題なさそうですので、
取得したデータが上手く連携できていないのかと思われます。


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

ptqa10
投稿日時: 2017/4/3 15:07
対応状況: 開発中
新米
登録日: 2017/3/26
居住地:
投稿: 5
Re: 商品一覧で子カテゴリにいる際にその親カテゴリからの表示を保ちたい
468様
お返事が遅くなって申し訳ありません。

引用:

1.lfGetSelectedCategoryId()の結果がきちんと取得できているか?
子カテゴリを表示した時に親カテゴリのIDが取得できていますか?

2.lfGetCatTree()の結果が指定したカテゴリの子カテゴリの配列が取得できているか?
指定したカテゴリIDの子カテゴリは取得できていますか?

3.tpl側が受け取った子カテゴリの配列をきちんと出力できているか?

アドバイスありがとうございます。
1.の親カテゴリIDの取得からつまずいてしまっております。

LC_Page_Products_List.phpにて

        // 親カテゴリID取得
		//インスタンス生成
		$objQuery = new SC_Query();
		$col = "*"; //カラム
		$table = "dtb_category"; //テーブル名
		$where = "category_id = ?"; //where句
		$switch_data = array($this->arrSearchData['category_id']); //配列で入れないといけないので注意
		$res = $objQuery->select($col,$table,$where,$switch_data);

		$parent_category_id = $res['parent_category_id'];

//デバッグ出力
		SC_Utils::sfPrintR($res['parent_category_id']);

として親カテゴリを出力しましたが、「NULL」が帰ってきてしまいます。
ここで行き詰まってしまい後が続かない状況になってしまいました。

何卒、お知恵をお借りできないでしょうか?
よろしくお願いいたします。
468
投稿日時: 2017/4/3 18:41
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: 商品一覧で子カテゴリにいる際にその親カテゴリからの表示を保ちたい
$res[0]['parent_category_id']で値が取得できませんか?
$objQueryは複数行の返却に対応していると思いますので、
例えSQLの結果が1行でも配列で返ってきていたと思います。


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

ptqa10
投稿日時: 2017/4/3 18:55
対応状況: 解決済
新米
登録日: 2017/3/26
居住地:
投稿: 5
Re: 商品一覧で子カテゴリにいる際にその親カテゴリからの表示を保ちたい
468様
アドバイスありがとうございます!!
引用:

468さんは書きました:
$res[0]['parent_category_id']で値が取得できませんか?
$objQueryは複数行の返却に対応していると思いますので、
例えSQLの結果が1行でも配列で返ってきていたと思います。

上記を試し、
LC_Page_Products_List.phpに

        // 画面に表示する検索条件を設定
        $this->arrSearch    = $this->lfGetSearchConditionDisp($this->arrSearchData);
		
        // 親カテゴリID取得
		//インスタンス生成
		$objQuery = new SC_Query();
		$col = "*"; //カラム
		$table = "dtb_category"; //テーブル名
		$where = "category_id = ?"; //where句
		$switch_data = array($this->arrSearchData['category_id']); //配列で入れないといけないので注意
		$res = $objQuery->select($col,$table,$where,$switch_data);

		$parent_category_id = $res[0]['parent_category_id'];

		// サブカテゴリリストを取得
		if ($parent_category_id[0] == 0){
			$this->arrSubCatList = $this->lfGetCatTree($this->arrSearchData['category_id']);
		}else{
			$this->arrSubCatList = $this->lfGetCatTree($parent_category_id[0]);
		}


と記述し、実行したところ思惑通りの動きとなりました。
誠にありがとうございます。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1638
8
red
1570
9
mcontact
1282
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
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.