在ec-eube的商品搜尋中控制不同層級的顏色

LINEで送る
[`evernote` not found]

老闆覺得每個層級都一樣顏色一樣大小對是使用者太不友善
所以希望可以改善一下
我還以為只是CSS的問題
誰知…那是一個將近耗掉我七個小時的大工程@@
 首先在\data\class\helper\SC_Helper_DB.php的sfGetCategoryList()

把層級的參數也傳回來

          for($cnt = 0; $cnt < $max; $cnt++) {
            $id = $arrRet[$cnt]['category_id'];
            $name = $arrRet[$cnt]['category_name'];
 $arrList[$id] = "";
 $arrLevel[$id] = ""; /*加這一行*/
            /*
            for($n = 1; $n < $arrRet[$cnt]['level']; $n++) {
                $arrList[$id].= " ";
            }
            */
            for($cat_cnt = 0; $cat_cnt < $arrRet[$cnt]['level']; $cat_cnt++) {
                $arrList[$id].= $head;
            }
            $arrList[$id].= $name;
 $arrLevel[$id]= $arrRet[$cnt]['level'];/*加這一行*/
        }
        return array($arrList, $arrLevel);/*改這一行*/

\html\user_data\packages\mystyle\bloc\search_products.tpl

<!--{html_options options=$arrCatList[0] selected=$category_id level=$arrCatList[1]}-->

\data\module\Smarty\libs\plugins\function.html_options.php的smarty_function_html_options()
讀取層級並放進函式中

    foreach($params as $_key =&gt; $_val) {
        switch($_key) {
            case 'name':
                $$_key = (string)$_val;
                break;
 
            case 'options':
                $$_key = (array)$_val;
                break;
 
         /*加這一段*/
         case 'level':
               $$_key = (array)$_val;
               break;
 
 ..............................
    if (isset($options)) {
         foreach ($options as $_key=&gt;$_val)
         $_html_result .= smarty_function_html_options_optoutput($_key, $_val, $selected,$level[$_key]);/*加這一段$selected,$level[$_key]*/ 
 
    } else {
 
        foreach ($values as $_i=&gt;$_key) {
            $_val = isset($output[$_i]) ? $output[$_i] : '';
            $_html_result .= smarty_function_html_options_optoutput($_key, $_val, $selected,$level[$_key]); /*加這一段$selected,$level[$_key]*/
        }
 
    }

smarty_function_html_options_optoutput()
把層級的參數變成class方便等一下用CSS控制

function smarty_function_html_options_optoutput($key, $value, $selected,$level) {/*加入參數$level*/
if(!is_array($value)) {
$_html_result = '
if (in_array((string)$key, $selected))
$_html_result .= ' selected="selected"';
$_html_result .= ' class="level'.$level. '"'; /*加這一行*/
$_html_result .= '&gt;' . smarty_function_escape_special_chars($value) . '' . "\n";
} else {
$_html_result = smarty_function_html_options_optgroup($key, $value, $selected,$level[$_key]);
}
return $_html_result;
}

smarty_function_html_options_optgroup()
把層級的參數放進函式

function smarty_function_html_options_optgroup($key, $values, $selected,$level) {
$optgroup_html = '' . "\n";
foreach ($values as $key =&gt; $value) {
$optgroup_html .= smarty_function_html_options_optoutput($key, $value, $selected,$level[$_key]);/*加入參數$level*/
}
$optgroup_html .= "\n";
return $optgroup_html;
}

\user_data\packages\mystyle\css\default-css.css加上一段
終於可以用CSS控制了
不過….為什麼只有顏色有效阿@@

.box142 .level1{
 color:#FF6600;
}

終於搞定了@@