ecshop ナビゲーションによって達成される目標:
まず、たとえば上の図で、3 レベルの分類、レスポンシブ レイアウト、この列にアクセスすると、最上位コンポーネントを強調表示する必要があります。 表示
2 つ目は、ナビゲーションに製品または記事チャネルがあり、サブ列がある場合、すべてのサブ列が自動的に表示されます
3 つ目は、このナビゲーションにサブカテゴリがある場合です。 、ドロップダウンの三角形のロゴが均一に表示されます
コードは次のとおりです
まず、includes/lib_main.php ファイルで、get_navigator() 関数を変更または名前変更して再定義します。さらに、get_categories_tree() 関数は、lib_goods.php
/** * 取得自定义导航栏列表 * @param string $type 位置,如top、bottom、middle * @return array 列表 */function get_navigator($ctype = '', $catlist = array()){ $sql = 'SELECT * FROM '. $GLOBALS['ecs']->table('nav') . ' WHERE ifshow = \'1\' ORDER BY vieworder'; $res = $GLOBALS['db']->query($sql); $cur_url = substr(strrchr($_SERVER['REQUEST_URI'],'/'),1); if (intval($GLOBALS['_CFG']['rewrite'])) { if(strpos($cur_url, '-')) { preg_match('/([a-z]*)-([0-9]*)/',$cur_url,$matches); $cur_url = $matches[1].'.php?id='.$matches[2]; } } else { $cur_url = substr(strrchr($_SERVER['REQUEST_URI'],'/'),1); } $noindex = false; $active = 0; $has_suv=0; $navlist = array( 'top' => array(), 'middle' => array(), 'bottom' => array() ); while ($row = $GLOBALS['db']->fetchRow($res)){ if($row['ctype']=='a'){//如果是文章类的栏目 $row3=get_article_tree_for_nav($row['cid']);//列出所有子文章分类 $navlist[$row['type']][] = array( 'name' => $row['name'], 'opennew' => $row['opennew'], 'url' => $row['url'], 'ctype' => $row['ctype'], 'cid' => $row['cid'], 'has_suv' => 1,//文章类用1 'sub_nav' => $row3, ); }elseif($row['ctype']=='c'){//商品类的栏目 $row4=get_categories_tree($row['cid']);//使用系统默认的函数即可.商品子类 $navlist[$row['type']][] = array( 'name' => $row['name'], 'opennew' => $row['opennew'], 'url' => $row['url'], 'ctype' => $row['ctype'], 'cid' => $row['cid'], 'has_suv' => 2,//与文章的导航做区分 'sub_nav' => $row4, ); }else{ $navlist[$row['type']][] = array(//单页面等栏目,比如about.php等 'name' => $row['name'], 'opennew' => $row['opennew'], 'url' => $row['url'], 'ctype' => $row['ctype'], 'cid' => $row['cid'] ); } } /*遍历自定义是否存在currentPage*/ foreach($navlist['middle'] as $k=>$v){ $condition = empty($ctype) ? (strpos($cur_url, $v['url']) === 0) : (strpos($cur_url, $v['url']) === 0 && strlen($cur_url) == strlen($v['url']));//单页,如about.php等,$ctype的值没有被传入 //当前网址与数据库中循环出的网址相同 if ($condition)//如果相同 { $navlist['middle'][$k]['active'] = 1;//是否为当前页,追加到数组中 $noindex = true;//非首页 } } if(!empty($ctype))//文章或商品页面.在其控制器上传入了本栏目的类型,商品类,用c表示,或文章类,用a表示 { //print_r($catlist);exit;即当前访问分类id foreach($catlist as $key => $val){ $parent_arr=get_top_cat_id_arr($val,$ctype);//当前被访问的分类id的所有父栏目组成的数组 //print_r($parent_arr);exit; foreach($navlist['middle'] as $k=>$v) { if(!empty($v['ctype']) && $v['ctype'] == $ctype && ($v['cid'] == $val ||in_array($v['cid'],$parent_arr))) {//in_array($v['cid'],$parent_arr),这句表示,如果本导航条上显示的频道id,包含在了当前访问的栏目的所有父栏目id数组中,则本导航条可高亮显示 $navlist['middle'][$k]['active'] = 1;//高亮关键字 $noindex = true; } } } } if ($noindex == false) { $navlist['config']['index'] = 1; }//print_r($navlist);exit; return $navlist;}
3 つ目は、対応するヘッダー テンプレートにサンプルを追加することです。レベルを上げたい場合は、テンプレートにネストし続けるだけです。次の関数はレベル関数 get_top_cat_id_arr() を増やすこともできます