www.gusucode.com > iWebshop开源PHP商城系统 v2.8源码程序 > iwebshop/classes/menu.php
<?php /** * @copyright Copyright(c) 2011 jooyea.cn * @file menu.php * @brief 后台系统菜单管理 * @author webning * @date 2011-01-12 * @version 0.6 * @note */ /** * @brief Menu * @class Menu * @note */ class Menu { private static $commonMenu = array('/system/default'); public $current; //菜单的配制数据 private static $menu = array( '商品'=>array( '商品管理'=>array( '/goods/goods_list' => '商品列表', '/goods/goods_edit' => '商品添加' ), '商品分类'=>array( '/goods/category_list' => '分类列表', '/goods/category_edit' => '添加分类' ), '品牌'=>array( '/brand/category_list' => '品牌分类', '/brand/brand_list' => '品牌列表' ), '模型'=>array( '/goods/model_list'=>'模型列表', '/goods/spec_list'=>'规格列表', '/goods/spec_photo'=>'规格图库' ), '搜索'=>array( '/tools/keyword_list' => '关键词列表', '/tools/search_list' => '搜索统计' ) ), '会员'=>array( '会员管理'=>array( '/member/member_list' => '会员列表', '/member/group_list' => '会员组列表', '/member/withdraw_list'=>'会员提现管理' ), '商户管理' => array( '/member/seller_list' => '商户列表', '/member/seller_edit' => '添加商户', ), '信息处理' => array( '/comment/suggestion_list' => '建议管理', '/comment/refer_list' => '咨询管理', '/comment/discussion_list' => '讨论管理', '/comment/comment_list' => '评价管理', '/comment/message_list' => '站内消息', '/message/notify_list' => '到货通知', ), '邮件短信设置'=>array( '/message/tpl_list' => '模板管理', '/message/registry_list'=> '邮件订阅' ) ), '订单'=>array( '订单管理'=>array( '/order/order_list' => '订单列表', '/order/order_edit' => '添加订单' ), '单据管理'=>array( '/order/order_collection_list' => '收款单', '/order/order_refundment_list' => '退款单', '/order/order_delivery_list' => '发货单', '/order/refundment_list' => '退款申请列表', ), '发货地址'=>array( '/order/ship_info_list' => '发货地址管理', ), ), '营销'=>array( '促销活动' => array( '/market/pro_rule_list' => '促销活动列表' ), '营销活动' => array( '/market/pro_speed_list' => '限时抢购', '/market/regiment_list' => '团购', ), '代金券管理'=>array( '/market/ticket_list' => '代金券列表', '/market/ticket_excel_list' => '代金券文件列表', ) ), '统计'=>array( '基础数据统计'=>array( '/market/user_reg' => '用户注册统计', '/market/spanding_avg' => '人均消费统计', '/market/amount' => '销售金额统计' ), '日志操作记录'=>array( '/market/account_list' => '资金操作记录', '/market/operation_list' => '后台操作记录', ), '商户数据统计'=>array( '/market/order_goods_list' => '货款明细', '/market/bill_list' => '货款结算单列表', ) ), '系统'=>array( '后台首页'=>array( '/system/default' => '后台首页', ), '网站管理'=>array( '/system/conf_base' => '网站设置', '/system/conf_ui' => '主题设置', ), '支付管理'=>array( '/system/payment_list' => '支付方式' ), '多平台登录'=>array( '/system/oauth_list' => '平台列表' ), '配送管理'=>array( '/system/delivery' => '配送方式', '/system/freight_list' => '物流公司' ), '地域管理'=>array( '/system/area_list' => '地区列表', ), '权限管理'=>array( '/system/admin_list' => '管理员', '/system/role_list' => '角色', '/system/right_list' => '权限资源' ) ), '工具'=>array( '数据库管理'=>array( '/tools/db_bak' => '数据库备份', '/tools/db_res' => '数据库还原', ), '文章管理'=>array( '/tools/article_cat_list'=> '文章分类', '/tools/article_list'=> '文章列表' ), '帮助管理'=>array( '/tools/help_cat_list'=> '帮助分类', '/tools/help_list'=> '帮助列表' ), '广告管理'=>array( '/tools/ad_position_list'=> '广告位列表', '/tools/ad_list'=> '广告列表' ), '公告管理'=>array( '/tools/notice_list'=> '公告列表', '/tools/notice_edit'=> '公告发布' ), '网站地图'=>array( '/tools/seo_sitemaps' => '网站搜索地图', ) ) ); /** * @brief 对于menu列表未定义的进行映射别名操作 key => 当前URL地址 , value => 替换的URL地址 */ private static $menu_non_display = array( '/system/navigation' => '/system/default', '/system/navigation_edit' => '/system/default', '/system/navigation_recycle' => '/system/default', '/system/delivery_edit' => '/system/delivery', '/system/delivery_recycle' => '/system/delivery', '/member/recycling' => '/member/member_list', '/tools/article_edit_act'=>'/tools/article_list', '/message/notify_filter' =>'/message/notify_list', '/market/ticket_edit' => '/market/ticket_list', '/market/bill_edit' => '/market/bill_list', '/order/collection_show' => '/order/order_collection_list', '/order/refundment_show' => '/order/order_refundment_list', '/order/delivery_show' => '/order/order_delivery_list', '/order/refundment_doc_show' => '/order/refundment_list', '/order/print_template' => '/order/order_list', '/order/collection_recycle_list' => '/order/order_collection_list', '/order/delivery_recycle_list' => '/order/order_delivery_list', '/order/recycle_list' => '/order/ship_info_list', '/order/expresswaybill_edit' => '/order/order_list', '/order/order_show' => '/order/order_list', ); /** * @brief 根据用户的权限过滤菜单 * @return array */ private function filterMenu() { $rights = ISession::get('admin_right'); //如果不是超级管理员则要过滤菜单 if($rights != 'administrator') { foreach(self::$menu as $firstKey => $firstVal) { if(is_array($firstVal)) { foreach($firstVal as $secondKey => $secondVal) { if(is_array($secondVal)) { foreach($secondVal as $thirdKey => $thirdVal) { if(!in_array($thirdKey,self::$commonMenu) && (stripos(str_replace('@','/',$rights),','.substr($thirdKey,1).',') === false)) { unset(self::$menu[$firstKey][$secondKey][$thirdKey]); } } if(empty(self::$menu[$firstKey][$secondKey])) { unset(self::$menu[$firstKey][$secondKey]); } } } if(empty(self::$menu[$firstKey])) { unset(self::$menu[$firstKey]); } } } } } /** * @brief 取得当前菜单应该生成的对应JSON数据 * @param boolean $is_auto 是否智能匹配菜单 * @return Json */ public function submenu($is_auto = false) { $result = array(); $controller = IWeb::$app->getController()->getId(); $action = IWeb::$app->getController()->getAction()->getId(); //当前菜单无定义时做映射别名 $this->current = '/'.$controller.'/'.$action; if(isset(self::$menu_non_display[$this->current])) { $this->current = self::$menu_non_display[$this->current]; } else { $actionArray = explode("_",$action); $model = current($actionArray); } $find_current = false; //过滤无操作权限的菜单 $this->filterMenu(); foreach(self::$menu as $key => $value) { $item = array(); $item['current'] = false; $item['title'] = $key; foreach($value as $big_cat_name => $big_cat) { foreach($big_cat as $link => $title) { //把菜单的第一连接项分给顶级菜单 if(!isset($item['link'])) { $item['link'] = $link; } if($find_current) { break; } //遍历菜单项找到与当前连接相同的项目 if( $link == $this->current || ($is_auto == true && isset($model) && preg_match("!^/[^/]+/{$model}_!",$link) ) ) { $item['current'] = $find_current = true; foreach($value as $k => $v) { foreach($v as $subMenuKey => $subMenuName) { $tmpUrl = IUrl::creatUrl($subMenuKey); unset($value[$k][$subMenuKey]); $value[$k][$tmpUrl]['name'] = $subMenuName; $value[$k][$tmpUrl]['urlPathinfo'] = $subMenuKey; } } $item['list'] = $value; } } if($find_current) { break; } } $item['link'] = IUrl::creatUrl($item['link']); $result[] = $item; } if($find_current == false && $is_auto == false) { return $this->submenu(true); } return JSON::encode($result); } }