Ecshop中導航欄中使用二級選單顯示並呼叫子分類
阿新 • • 發佈:2019-01-06
最近公司交給我一個任務,就是要我使用ecshop仿照某國外著名商城網站的模板,前臺樣式模仿就直接照抄照搬,整個過程還相對簡單,但就在一個問題上卡住了,就是模板中有涉及主導航二級欄目顯示分類商品問題,老實說,這一次是第一次認真使用ecshop的商城系統,以前使用都只是安裝好後,在網上找個模板改幾張圖片就完成了,這次是自己從頭到尾修改模板樣式和佈局,所以沒有在ecshop下使用二級欄目的經驗。於是開啟百度,搜尋了N個方法,結果沒有一個方法可行,或許是我沒看明白網上軟文所表達的意思吧,在我差不多要放棄網上的方法時,打算自己二次開發修改PHP程式碼的時候,無意看到一個正是修改PHP程式碼的方法,發現結果是很符合我須求的,高興ING,節省我N多時間,方法呼叫己經找到了,接下來就是樣式及表現形式了。廢話說了那麼多,具體方法如下:
在includes/cls_template.php裡頂部插入分類函式程式碼:
接下來呢,ecshop中的模板檔案,也就是thems,找到你自己的模板資料夾,我就使用預設的說好了,開啟themes\default\library\page_header.lbi檔案
找到ecshop的導航條模板檔案程式碼,也就是以下程式碼:
在程式碼中加入一段呼叫分類的程式碼,位置看你如何構思二級分類的表現,我是直接這樣加的,我是直接使用滑鼠移到或移出當前欄目名稱時,更改當前欄目標籤的CLASS名稱和CSS樣式結合達到二級欄目的顯示和隱藏的:
CSS樣式的表現思路:我通過滑鼠移入移出改變當前li標籤的CLASS名稱,當滑鼠移到上面時,CLASS為"menu1",當滑鼠移出時,則變回"menu2",在li下的div層的顯示和隱藏就決定該DIV的父層li 的CLASS名是"menu1"還是"menu2"了,2為隱藏,1為顯示,具體就這樣了,還看不懂的可以留言給我
在includes/cls_template.php裡頂部插入分類函式程式碼:
//通過引數判斷是否存在二級分類
function get_subcate_byurl($url)
{
$rs = strpos($url,"category");
if($rs!==false)
{
preg_match("/\d+/i",$url,$matches);
$cid = $matches[0];
$cat_arr = array();
$sql = "select * from ".$GLOBALS['ecs']->table('category')." where parent_id=".$cid." and is_show=1 ORDER BY sort_order ASC, cat_id ASC";
$res = $GLOBALS['db']->getAll($sql);
foreach($res as $idx => $row)
{
$cat_arr[$idx]['id'] = $row['cat_id'];
$cat_arr[$idx]['name'] = $row['cat_name'];
$cat_arr[$idx]['url'] = build_uri('category', array('cid' => $row['cat_id']), $row['cat_name']);
$cat_arr[$idx]['children'] = get_clild_list($row['cat_id']);
}
return $cat_arr;
}
else
{
return false;
}
}
function get_clild_list($pid)
{
//開始獲取子分類
$sql_sub = "select * from ".$GLOBALS['ecs']->table('category')." where parent_id=".$pid." and is_show=1 ";
$subres = $GLOBALS['db']->getAll($sql_sub);
if($subres)
{
foreach ($subres as $sidx => $subrow)
{
$children[$sidx]['id']=$subrow['cat_id'];
$children[$sidx]['name']=$subrow['cat_name'];
$children[$sidx]['url']=build_uri('category', array('cid' => $subrow['cat_id']), $subrow['cat_name']);
}
}
else
{
$children = null;
}
return $children;
}
接下來呢,ecshop中的模板檔案,也就是thems,找到你自己的模板資料夾,我就使用預設的說好了,開啟themes\default\library\page_header.lbi檔案
找到ecshop的導航條模板檔案程式碼,也就是以下程式碼:
<li><a href="../index.php"{if $navigator_list.config.index eq 1} class="cur"{/if}>{$lang.home}<span></span></a></li>
<!-- {foreach name=nav_middle_list from=$navigator_list.middle item=nav} -->
<li><a href="{$nav.url}" {if $nav.opennew eq 1}target="_blank" {/if} {if $nav.active eq 1}class="cur" {/if} >{$nav.name}<span></span></a></li>
<!-- {/foreach} -->
</ul>
在程式碼中加入一段呼叫分類的程式碼,位置看你如何構思二級分類的表現,我是直接這樣加的,我是直接使用滑鼠移到或移出當前欄目名稱時,更改當前欄目標籤的CLASS名稱和CSS樣式結合達到二級欄目的顯示和隱藏的:
<li><a href="../index.php"{if $navigator_list.config.index eq 1} class="cur"{/if}>{$lang.home}<span></span></a></li>
<!-- {foreach name=nav_middle_list from=$navigator_list.middle item=nav} -->
<li class="menu2" id="netxu">
<a href="{$nav.url}" {if $nav.opennew eq 1}target="_blank" {/if} {if $nav.active eq 1}class="cur" {/if} >{$nav.name}<span></span></a>
<?php
$subcates = get_subcate_byurl($GLOBALS['smarty']->_var['nav']['url']);
if($subcates!=false)
{
if(count($subcates)>0)
{
if($subcates)
{
$i = 1;
echo "<div class='cnav' id='cnav'>";
foreach($subcates as $cate)
{
if($i % 2 == 0)
{
}
else
{
}
echo "<div class='class_box'>";
echo "<a class='level_1' href='".$cate['url']."' >".$cate['name']."</a>";
echo "</p>";
if($cate['children'])
{
foreach($cate['children'] as $subcate)
{
echo "<p class='three'>";
echo "<a href='".$subcate['url']."' class='level_2'>".$subcate['name']."</a>";
echo "</p>";
}
echo "</div>";
}
}
echo "</div>";
}
}
}
?>
</li>
<!-- {/foreach} -->
</ul>
CSS樣式的表現思路:我通過滑鼠移入移出改變當前li標籤的CLASS名稱,當滑鼠移到上面時,CLASS為"menu1",當滑鼠移出時,則變回"menu2",在li下的div層的顯示和隱藏就決定該DIV的父層li 的CLASS名是"menu1"還是"menu2"了,2為隱藏,1為顯示,具體就這樣了,還看不懂的可以留言給我