/** * Renders the product group navigation. * * @param SiteTree $rootPage The root page to start with * @param SiteTree $currentPage The current SiteTree object * @param int $level The current level * * @return string * * @author Sebastian Diel <*****@*****.**>, * Sascha Koehler <*****@*****.**> * @since 24.11.2014 */ public function renderProductGroupNavigation($rootPage, $currentPage, $level = 0) { $renderStr = ''; $isActivePage = false; $level++; if ($this->levelsToShow == 0 || $level <= $this->levelsToShow) { if (!($this->expandActiveSectionOnly && ($this->levelsToShow != 0 && $level > $this->levelsToShow || $level > 1) && SilvercartTools::findPageIdInHierarchy($rootPage->getParent()->ID) === false)) { $childPages = $rootPage->Children(); $childPageStr = ''; if ($childPages && $childPages->Count() > 0) { foreach ($childPages as $childPage) { $childPageStr .= $this->renderProductGroupNavigation($childPage, $currentPage, $level); } } if (Controller::curr()->ID === $rootPage->ID) { $isActivePage = true; } if (SilvercartTools::findPageIdInHierarchy($rootPage->ID) || $rootPage->ID === $currentPage->ID) { $isActiveSection = true; } else { $isActiveSection = false; } $data = new ArrayData(array('MenuTitle' => $rootPage->getMenuTitle(), 'Title' => $rootPage->getTitle(), 'Link' => $rootPage->Link(), 'LinkOrSection' => $rootPage->LinkOrSection(), 'ChildPages' => $childPageStr, 'IsActivePage' => $isActivePage, 'IsActiveSection' => $isActiveSection, 'Level' => $level)); $renderStr .= $data->renderWith('SilvercartProductGroupNavigationWidgetEntry'); } } return $renderStr; }
/** * Builds a hierarchy from the current page to the top product group page * or holder. * * @param SiteTree $currPage The page to start from * * @return array * * @author Sascha Koehler <*****@*****.**> * @since 18.10.2012 */ public static function getPageHierarchy($currPage) { if (!array_key_exists('SiteTree_' . $currPage->ID, self::$pageHierarchy)) { $level = 0; $hierarchy = array('SiteTree_' . $currPage->ID => array('Page' => $currPage, 'Level' => $level)); while ($currPage->hasMethod('getParent') && $currPage->getParent()) { $parent = $currPage->getParent(); if ($parent) { $level++; $hierarchy['SiteTree_' . $parent->ID] = array('Page' => $parent, 'Level' => $level); $currPage = $parent; } else { break; } } self::$pageHierarchy['SiteTree_' . $currPage->ID] = array(); foreach ($hierarchy as $pageID => $pageInfo) { self::$pageHierarchy['SiteTree_' . $currPage->ID][$pageID] = array('Page' => $pageInfo['Page'], 'Level' => ($pageInfo['Level'] - $level) * -1); } } return self::$pageHierarchy['SiteTree_' . $currPage->ID]; }