バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > 「商品カテゴリから選ぶ」欄のカスタマイズ

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
fukap
投稿日時: 2011/4/7 19:03
対応状況: −−−
仙人
登録日: 2009/7/7
居住地: 滋賀県
投稿: 907
「商品カテゴリから選ぶ」欄のカスタマイズ
すっかり煮詰まってしまったので、教えてください。


デフォルトのブロックパーツで「検索条件」があると思います。
その「商品カテゴリから選ぶ」のリストボックスで、カテゴリ一覧が表示されますが、
カテゴリ数や階層が複雑になってしまったので、背景色を色分けして見やすくしようと思いました。
例えば、1階層目は背景色を赤に、2階層目は青に、3階層目は黄に、という感じです。


search_products.tplを見ると、
<!--{html_options options=$arrCatList selected=$category_id}-->
という記述でリストボックスの中身を生成しているようでした。

その源流を辿ってみると、./data/module/Smarty/libs/plugins/function.html_options.php にある
smarty_function_html_options_optoutput() というファンクションのなかで、
<option label= ...>〜</option> 部分を生成しているようでした。

ここでdtb_categoryテーブルのlevelフィールドの値を利用できれば、
<option class="level1"...>〜</option>というような形にして、CSSで
option.level1 { background-color:#FF0000; } などとすれば、実現できそうな気がしました。

ただどうやってlevelフィールドの値を引っ張ってくればいいのかがわかりません。
またもっと良いやり方などはあるのでしょうか?
具体的なカスタマイズ方法など示していただければ助かります!


------------------------------------------------------------------------------------------
[EC-CUBE] 2.4.4
[レンタルサーバ] 自社
[OS] CentOS 5.5
[PHP] 5.1.6
[データベース] PostgreSQL 8.3.9
[WEBサーバ] Apache 2.2.3
[ブラウザ] Chrome
------------------------------------------------------------------------------------------
AMUAMU
投稿日時: 2011/4/8 13:49
対応状況: −−−
登録日: 2009/5/2
居住地: 東京都
投稿: 2712
Re: 「商品カテゴリから選ぶ」欄のカスタマイズ
html_options はSmartyの標準関数です。

function.html_options.phpのレベルでカスタマイズしたいのであれば下記が参考になるかもしれません。
http://www.north.ad.jp/~shmd_ak/rc/smarty02-options.html

またSmartyに関するサイトやTipsを探されると目的に近い物があるのではないかと思います。


----------------
EC-CUBE公式エヴァンジェリスト
EC-CUBEインテグレートパートナー (株)スピリット・オブ
移転・拡張・高速化・問題解決
各種カスタマイズ・支援依頼承ります。

[url=h

fukap
投稿日時: 2011/4/8 22:18
対応状況: −−−
仙人
登録日: 2009/7/7
居住地: 滋賀県
投稿: 907
Re: 「商品カテゴリから選ぶ」欄のカスタマイズ
うー読んでみましたが、難しいですね。

頑張ってみます。
fukap
投稿日時: 2011/4/11 22:29
対応状況: −−−
仙人
登録日: 2009/7/7
居住地: 滋賀県
投稿: 907
Re: 「商品カテゴリから選ぶ」欄のカスタマイズ
ブロック編集のカテゴリブロックでも、カテゴリ一覧が取得されているので、
それに近づければうまくいくかなという発想で、ゴリ押しでやってみたら出来ました。
正直よくわからずやっているので、たぶん褒められた方法ではないと思いますが・・・。
今のところ思った通りの結果は得られていますが、問題点などありましたら教えてください。

.data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_SearchProducts.php の70行目付近に以下のコードを追加。
(LC_Page_FrontParts_Bloc_Category.phpからコピっただけ)

$this->lfGetCatTree($this->category_id, true, $this);

同じく.data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_SearchProducts.php の88行目付近に以下のコードを追加。
(LC_Page_FrontParts_Bloc_Category.phpからコピっただけ)

    // カテゴリツリーの取得
    function lfGetCatTree($arrParent_category_id, $count_check = false) {
        $objQuery = new SC_Query();
        $objDb = new SC_Helper_DB_Ex();
        $col = "*";
        $from = "dtb_category left join dtb_category_total_count using (category_id)";
        // 登録商品数のチェック
        if($count_check) {
            $where = "del_flg = 0 AND product_count > 0";
        } else {
            $where = "del_flg = 0";
        }
        $objQuery->setOption("ORDER BY rank DESC");
        $arrRet = $objQuery->select($col, $from, $where);

        foreach ($arrParent_category_id as $category_id) {
            $arrParentID = $objDb->sfGetParents($objQuery, 'dtb_category', 'parent_category_id', 'category_id', $category_id);
            $arrBrothersID = SC_Utils_Ex::sfGetBrothersArray($arrRet, 'parent_category_id', 'category_id', $arrParentID);
            $arrChildrenID = SC_Utils_Ex::sfGetUnderChildrenArray($arrRet, 'parent_category_id', 'category_id', $category_id);

            $this->root_parent_id[] = $arrParentID[0];

            $arrDispID = array_merge($arrBrothersID, $arrChildrenID);

            foreach($arrRet as $key => $array) {
                foreach($arrDispID as $val) {
                    if($array['category_id'] == $val) {
                        $arrRet[$key]['display'] = 1;
                        break;
                    }
                }
            }
        }

        $this->arrTree = $arrRet;
    }

.data/Smarty/templates/default/bloc/search_products.tpl の適当な場所に以下のコードを追加。
(自分で適当に書きました)

<style type="text/css">
select option.level1 { background-color:#999; color:#fff; }
select option.level2 { background-color:#f6f6f6; }
select option.level3 { background-color:#ff0000; }
select option.level4 { background-color:#00ff00; }
select option.level5 { background-color:#0000ff; }
</style>

<!--{section name=cnt loop=$arrTree}-->
<option label="<!--{$arrTree[cnt].category_name}-->" value="<!--{$arrTree[cnt].category_id}-->" class="level<!--{$arrTree[cnt].level}-->"<!--{if $smarty.get.category_id == $arrTree[cnt].category_id}--> selected<!--{/if}-->><!--{$arrTree[cnt].category_name}--></option>
<!--{/section}-->
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は90,310名です
総投稿数は110,369件です

投稿数ランキング

1
seasoft
7369
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1693
8
red
1571
9
mcontact
1360
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.