您的位置:首页 > 运维架构

Ecshop中导航栏中使用二级菜单显示并调用子分类

2014-02-10 23:14 405 查看
最近公司交给我一个任务,就是要我使用ecshop仿照某国外著名商城网站的模板,前台样式模仿就直接照抄照搬,整个过程还相对简单,但就在一个问题上卡住了,就是模板中有涉及主导航二级栏目显示分类商品问题,老实说,这一次是第一次认真使用ecshop的商城系统,以前使用都只是安装好后,在网上找个模板改几张图片就完成了,这次是自己从头到尾修改模板样式和布局,所以没有在ecshop下使用二级栏目的经验。于是打开百度,搜索了N个方法,结果没有一个方法可行,或许是我没看明白网上软文所表达的意思吧,在我差不多要放弃网上的方法时,打算自己二次开发修改PHP代码的时候,无意看到一个正是修改PHP代码的方法,发现结果是很符合我须求的,高兴ING,节省我N多时间,方法调用己经找到了,接下来就是样式及表现形式了。废话说了那么多,具体方法如下:

在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为显示,具体就这样了,还看不懂的可以留言给我
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: