获得当前访问的MVC
/** * 获得当前访问的MVC * @param Zend_Controller_Front $ctlFront * @return array(module, controller, action) * * @example * list($module, $controller, $action) = getMVC(); */ public static function getMVC($ctlFront = null) { if ($ctlFront == null) { $ctlFront = Zend_Controller_Front::getInstance(); } $request = $ctlFront->getRequest(); $requestURI = $request->getRequestUri(); $qryPos = strpos($requestURI, '?'); if ($qryPos>0) { $requestURI = substr($requestURI, 0, $qryPos); } $requestURI = str_replace('\\', '/', $requestURI); //pre-process danguress url req $requestURI = preg_replace("|\/+|s", '/', $requestURI); $requestURI = trim($requestURI, '/'); list($module, $controller, $action) = explode('/', $requestURI); if (empty($module)) { $module = $request->getModuleName(); } if (empty($controller)) { $controller = $request->getControllerName(); } if (empty($action)) { $action = $request->getActionName(); } if (empty($module)) { $module = $ctlFront->getDefaultModule(); } if (empty($controller)) { $controller = $ctlFront->getDefaultControllerName(); } if (empty($action)) { $action = $ctlFront->getDefaultAction(); } return array($module, $controller, $action); }
/** * 设置高亮的菜单module,controller,和action * 可以只改变其中一个,如:如果只改变controller,则传递controller即可 * @param unknown_type $m * @param unknown_type $c * @param unknown_type $a * 设置到view中, implode('.', array($m, $c, $a)); * @return string */ protected function _highlight($m='', $c='', $a = '') { list($autom, $autoc, $autoa) = getMVC(); if ($m == '' && $c == '' && $a== '') { $m = $autom; $c = $autoc; $a = $autoa; } else { if ($m == '') { $m = $autom; } if ($c == '') { $c = $autoc; } if ($a == '') { $a = $autoa; } } $this->view->highlight = implode('.', array($m, $c, $a)); }
<div id="SubMenu"> <?php $arrNav = array( ''=>array( 'subnav'=>array( ''=>array('url'=>'/default/site/', 'highlight'=>array( 'default.site.index', 'default.site.add' ) ), ), ) ), ); $highlight = $this->highlight; foreach ($arrNav as $key=>$oneRow) { $arrSubNav = $oneRow['subnav']; $lihtml = ''; $currentclass = ''; $subclass = ''; foreach ($arrSubNav as $subtitle=>$arrSubNavItem) { if ($arrSubNavItem['highlight']==$highlight) { $currentclass = 'current'; $subclass = 'current'; } else { $subclass = ''; } $lihtml .= '<li class="'.$subclass.'"><a href="'.$arrSubNavItem['url'].'">'.$subtitle.'</a></li>'; } ?> <ul class="menu-sub <?php echo $currentclass;?>"> <?php echo $lihtml;?> </ul> <?php } ?> </div> <script type="text/javascript"> $('.menu-title').click(function(){ $(this).next('ul').toggle(); }); </script>