Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * @category JR
- * @package JR_CleverCms
- * @author Ng Kiat Siong, Celera eShop, kiatsiong.ng@gmail.com
- */
- class JR_CleverCms_Block_Cms_Page_Menu extends JR_CleverCms_Block_Catalog_Navigation
- {
- protected function _toHtml()
- {
- $html = '';
- if ($identifier = $this->getIdentifier()) {
- $storeId = Mage::app()->getStore()->getId();
- if ($pageId = Mage::getResourceModel('cms/page')->checkIdentifier($identifier, $storeId)) {
- $page = Mage::getModel('cms/page')->load($pageId);
- $html = $this->_renderCmsMenuItemHtml($page);
- }
- }
- return $html;
- }
- /**
- * Render CMS Page Menu
- *
- * @param Mage_Cms_Model_Page $page
- * @param int Nesting level number
- * @param boolean Whether or not this item is last, affects list item class
- * @param boolean Whether or not this item is first, affects list item class
- * @param boolean Whether or not this item is outermost, affects list item class
- * @param string Extra class of outermost list items
- * @param string If specified wraps children list in div with this class
- * @param boolean Whether or not to add on* attributes to list item
- * @return string
- */
- protected function _renderCmsMenuItemHtml($page, $level = 1, $isLast = false, $isFirst = false,
- $isOutermost = true, $outermostItemClass = 'block-account', $childrenWrapClass = 'block-content', $noEventAttributes = false)
- {
- if (! $this->_isAllowed($page)) {
- return '';
- }
- $html = array();
- // get all children
- $children = $page->getChildren();
- if (Mage::helper('cms/page')->isPermissionsEnabled($this->getStore())) {
- $children->addPermissionsFilter($this->getCustomerGroupId());
- }
- $childrenCount = $children->count();
- $hasChildren = ($children && $childrenCount);
- // select active children
- $activeChildren = array();
- foreach ($children as $child) {
- if ($child->getIsActive() && $child->getIncludeInMenu()) {
- $activeChildren[] = $child;
- }
- }
- $activeChildrenCount = count($activeChildren);
- $hasActiveChildren = ($activeChildrenCount > 0);
- // prepare list item html classes
- $classes = array();
- $classes[] = 'level'.$level;
- // note: not dealing with the 'nav-' class at the moment
- if ($this->isCmsPageActive($page)) {
- $classes[] = 'current';
- }
- $linkClass = '';
- if ($isOutermost && $outermostItemClass) {
- $classes[] = $outermostItemClass;
- $linkClass = ' class="'.$outermostItemClass.'"';
- }
- if ($isFirst) {
- $classes[] = 'first';
- }
- if ($isLast) {
- $classes[] = 'last';
- }
- if ($hasActiveChildren) {
- $classes[] = 'parent';
- }
- // prepare list item attributes
- $attributes = array();
- if (count($classes) > 0) {
- $attributes['class'] = implode(' ', $classes);
- }
- if ($hasActiveChildren && !$noEventAttributes) {
- $attributes['onmouseover'] = 'toggleMenu(this,1)';
- $attributes['onmouseout'] = 'toggleMenu(this,0)';
- }
- // assemble list item with attributes
- if ($isOutermost) {
- if ($page->getId()==$this->getCurrentCmsPage()->getId()) {
- $html[] = '<div '.$linkClass.'><div class="block-title"><strong><span>'. $this->escapeHtml($page->getTitle()) .'</span></strong></div>';
- } else {
- $html[] = '<div '.$linkClass.'><div class="block-title"><strong>'.'<a href="'. $page->getUrl() . '"/><span>'. $this->escapeHtml($page->getTitle()) .'</span></a></strong></div>';
- }
- } else {
- $htmlLi = '<li';
- foreach ($attributes as $attrName => $attrValue) {
- $htmlLi .= ' ' . $attrName . '="' . str_replace('"', '\"', $attrValue) . '"';
- }
- $htmlLi .= '>';
- $html[] = $htmlLi;
- if ($this->isCmsPageActive($page)) {
- $html[] .= '<strong>'. $this->escapeHtml($page->getTitle()) .'</strong>';
- } else {
- $html[] .= '<a href="'. $page->getUrl() . "/" .'"'.$linkClass.'>';
- $html[] .= '<span>'. $this->escapeHtml($page->getTitle()) .'</span>';
- $html[] .= '</a>';
- }
- }
- // render children
- $htmlChildren = '';
- $j = 0;
- foreach ($activeChildren as $child) {
- $htmlChildren .= $this->_renderCmsMenuItemHtml(
- $child,
- ($level + 1),
- ($j == $activeChildrenCount - 1), // is last
- ($j == 0), // is first
- false, // is outermost
- $outermostItemClass,
- $childrenWrapClass,
- $noEventAttributes
- );
- $j++;
- }
- if (!empty($htmlChildren)) {
- if ($childrenWrapClass) {
- $html[] = '<div class="' . $childrenWrapClass . '">';
- }
- $html[] = '<ul class="level'. $level .'">';
- $html[] = $htmlChildren;
- $html[] = '</ul>';
- if ($childrenWrapClass) {
- $html[] = '</div>';
- }
- }
- $html[] = $isOutermost ? '</div>' : '</li>';
- $html = implode("\n", $html);
- return $html;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement