ProShell v2.0
Dashboard
Server Info
Server: 158.106.128.192
PHP: 8.2.33
home
planet5
public_html
bansibaba.com
2026-09-16 23:42:32
Editing: Menu.php
Cancel
Save Changes
<?php /** * View helper to display menu * @package Am_View */ class Am_View_Helper_Menu extends Zend_View_Helper_Navigation_Menu { protected $_activeClass = "active"; protected $_normalClass = ""; protected $_disabledClass = "disabled"; protected $_hasChildrenClass = 'has-children'; function setHasChildrenClass($class) { $this->_hasChildrenClass = $class; return $this; } function getLiClass(Zend_Navigation_Page $subPage, $isActive) { $class = ''; if ($isActive && $this->_activeClass) $class .= $this->_activeClass . ' '; elseif ($subPage->get('disabled') && $this->_disabledClass) $class .= $this->_disabledClass . ' '; elseif ($this->_normalClass) $class .= $this->_normalClass . ' '; if ($subPage->hasChildren()) $class .= $this->_hasChildrenClass . ' '; if ($class = trim($class)) return " class=\"$class\""; } /** * Normalizes given render options * * @param array $options [optional] options to normalize * @return array normalized options */ protected function _normalizeOptions(array $options = array()) { $options = parent::_normalizeOptions($options); foreach (array('activeClass', 'normalClass', 'disabledClass') as $k) if (!empty($options[$k])) $this->{'_'.$k} = $options[$k]; return $options; } // Render methods: /** * Renders the deepest active menu within [$minDepth, $maxDeth], (called * from {@link renderMenu()}) * * @param Zend_Navigation_Container $container container to render * @param array $active active page and depth * @param string $ulClass CSS class for first UL * @param string $indent initial indentation * @param int|null $minDepth minimum depth * @param int|null $maxDepth maximum depth * @return string rendered menu */ protected function _renderDeepestMenu(Zend_Navigation_Container $container, $ulClass, $indent, $minDepth, $maxDepth) { if (!$active = $this->findActive($container, $minDepth - 1, $maxDepth)) { return ''; } // special case if active page is one below minDepth if ($active['depth'] < $minDepth) { if (!$active['page']->hasPages()) { return ''; } } else if (!$active['page']->hasPages()) { // found pages has no children; render siblings $active['page'] = $active['page']->getParent(); } else if (is_int($maxDepth) && $active['depth'] +1 > $maxDepth) { // children are below max depth; render siblings $active['page'] = $active['page']->getParent(); } $ulClass = $ulClass ? ' class="' . $ulClass . '"' : ''; $html = $indent . '<ul' . $ulClass . '>' . self::EOL; foreach ($active['page'] as $subPage) { if (!$this->accept($subPage)) { continue; } $html .= $indent . ' <li' . $this->getLiClass($subPage, $subPage->isActive(true)) . '>' . self::EOL; $html .= $indent . ' ' . $this->htmlify($subPage) . self::EOL; $html .= $indent . ' </li>' . self::EOL; } $html .= $indent . '</ul>'; return $html; } /** * Renders a normal menu (called from {@link renderMenu()}) * * @param Zend_Navigation_Container $container container to render * @param string $ulClass CSS class for first UL * @param string $indent initial indentation * @param int|null $minDepth minimum depth * @param int|null $maxDepth maximum depth * @param bool $onlyActive render only active branch? * @return string */ protected function _renderMenu(Zend_Navigation_Container $container, $ulClass, $indent, $minDepth, $maxDepth, $onlyActive) { $html = ''; // find deepest active if ($found = $this->findActive($container, $minDepth, $maxDepth)) { $foundPage = $found['page']; $foundDepth = $found['depth']; } else { $foundPage = null; } // create iterator $iterator = new RecursiveIteratorIterator($container, RecursiveIteratorIterator::SELF_FIRST); if (is_int($maxDepth)) { $iterator->setMaxDepth($maxDepth); } // iterate container $prevDepth = -1; foreach ($iterator as $page) { $depth = $iterator->getDepth(); $isActive = $page->isActive(true); if ($depth < $minDepth || !$this->accept($page)) { // page is below minDepth or not accepted by acl/visibilty continue; } else if ($onlyActive && !$isActive) { // page is not active itself, but might be in the active branch $accept = false; if ($foundPage) { if ($foundPage->hasPage($page)) { // accept if page is a direct child of the active page $accept = true; } else if ($foundPage->getParent()->hasPage($page)) { // page is a sibling of the active page... if (!$foundPage->hasPages() || is_int($maxDepth) && $foundDepth + 1 > $maxDepth) { // accept if active page has no children, or the // children are too deep to be rendered $accept = true; } } } if (!$accept) { continue; } } // make sure indentation is correct $depth -= $minDepth; $myIndent = $indent . str_repeat(' ', $depth); if ($depth > $prevDepth) { // start new ul tag if ($ulClass && $depth == 0) { $ulClass = ' class="' . $ulClass . '"'; } else { $ulClass = ''; } $html .= $myIndent . '<ul' . $ulClass . '>' . self::EOL; } else if ($prevDepth > $depth) { // close li/ul tags until we're at current depth for ($i = $prevDepth; $i > $depth; $i--) { $ind = $indent . str_repeat(' ', $i); $html .= $ind . ' </li>' . self::EOL; $html .= $ind . '</ul>' . self::EOL; } // close previous li tag $html .= $myIndent . ' </li>' . self::EOL; } else { // close previous li tag $html .= $myIndent . ' </li>' . self::EOL; } // render li tag and page $html .= $myIndent . ' <li' . $this->getLiClass($page, $isActive) . '>' . self::EOL . $myIndent . ' ' . $this->htmlify($page) . self::EOL; // store as previous depth for next iteration $prevDepth = $depth; } if ($html) { // done iterating container; close open ul/li tags for ($i = $prevDepth+1; $i > 0; $i--) { $myIndent = $indent . str_repeat(' ', $i-1); $html .= $myIndent . ' </li>' . self::EOL . $myIndent . '</ul>' . self::EOL; } $html = rtrim($html, self::EOL); } return $html; } public function htmlify(Zend_Navigation_Page $page) { $out = parent::htmlify($page); return $page->get('disabled') ? str_replace('<a', '<a onclick="return false;" ', $out) : $out; } }
Upload Files
Cancel
Upload
Create New
Cancel
Create
Change Permissions
Cancel
Save
Change Date
Cancel
Save
Rename Item
Cancel
Save
Confirm Delete
Are you sure you want to delete the selected items?
Cancel
Delete