protected function _getNavigation($categoryId) { global $REX; static $depth = 0; if ($categoryId < 1) { $cats = OOCategory::getRootCategories($this->ignoreOfflines); } else { $cats = OOCategory::getChildrenById($categoryId, $this->ignoreOfflines); } $return = ''; $ulIdAttribute = ''; $ulClassAttribute = ''; if (count($cats) > 0) { if (isset($this->ulId[$depth])) { $ulIdAttribute = ' id="' . $this->ulId[$depth] . '"'; } if (isset($this->ulClass[$depth])) { $ulClassAttribute = ' class="' . $this->ulClass[$depth] . '"'; } $return .= '<ul' . $ulIdAttribute . $ulClassAttribute . '>'; } foreach ($cats as $cat) { if ($this->_checkCallbacks($cat, $depth)) { $cssClasses = ''; $idAttribute = ''; // default li class if ($this->liClass != '') { $cssClasses .= ' ' . $this->liClass; } // li class if (is_array($this->liClassFromCategoryId) && isset($this->liClassFromCategoryId[$cat->getId()])) { $cssClasses .= ' ' . $this->liClassFromCategoryId[$cat->getId()]; } if ($this->liClassFromMetaField != '' && $cat->getValue($this->liClassFromMetaField) != '') { $cssClasses .= ' ' . $cat->getValue($this->liClassFromMetaField); } // li id if (is_array($this->liIdFromCategoryId) && isset($this->liIdFromCategoryId[$cat->getId()])) { $idAttribute = ' id="' . $this->liIdFromCategoryId[$cat->getId()] . '"'; } elseif ($this->liIdFromMetaField != '' && $cat->getValue($this->liIdFromMetaField) != '') { $idAttribute = ' id="' . $cat->getValue($this->liIdFromMetaField) . '"'; } // selected class if ($cat->getId() == $this->current_category_id) { // active menuitem $cssClasses .= ' ' . $this->activeClass; } elseif (in_array($cat->getId(), $this->path)) { // current menuitem $cssClasses .= ' ' . $this->selectedClass; } else { // do nothing } $trimmedCssClasses = trim($cssClasses); // build class attribute if ($trimmedCssClasses != '') { $classAttribute = ' class="' . $trimmedCssClasses . '"'; } else { $classAttribute = ''; } if ($this->hideWebsiteStartArticle && $cat->getId() == $REX['START_ARTICLE_ID'] || in_array($cat->getId(), $this->hideIds)) { // do nothing } else { $depth++; $urlType = 0; // default $return .= '<li' . $idAttribute . $classAttribute . '>'; if ($this->linkFromUserFunc != '') { $defaultLink = call_user_func($this->linkFromUserFunc, $cat, $depth); } else { $defaultLink = '<a href="' . $cat->getUrl() . '">' . htmlspecialchars($cat->getName()) . '</a>'; } if (!class_exists('seo42')) { // normal behaviour $return .= $defaultLink; } else { // only with seo42 2.0.0+ $urlData = seo42::getCustomUrlData($cat); // check if default lang has url clone option (but only if current categoy has no url data set) if (count($REX['CLANG']) > 1 && !isset($urlData['url_type'])) { $defaultLangCat = OOCategory::getCategoryById($cat->getId(), $REX['START_CLANG_ID']); $urlDataDefaultLang = seo42::getCustomUrlData($defaultLangCat); if (isset($urlDataDefaultLang['url_clone']) && $urlDataDefaultLang['url_clone']) { // clone url data from default language to current language $urlData = $urlDataDefaultLang; } } if (isset($urlData['url_type'])) { switch ($urlData['url_type']) { case 5: // SEO42_URL_TYPE_NONE $return .= htmlspecialchars($cat->getName()); break; case 4: // SEO42_URL_TYPE_LANGSWITCH $newClangId = $urlData['clang_id']; $newArticleId = $REX['ARTICLE_ID']; $catNewLang = OOCategory::getCategoryById($newArticleId, $newClangId); // if category that should be switched is not online, switch to start article of website if (OOCategory::isValid($catNewLang) && !$catNewLang->isOnline()) { $newArticleId = $REX['START_ARTICLE_ID']; } // select li that is current language if ($REX['CUR_CLANG'] == $newClangId) { $return = substr($return, 0, strlen($return) - strlen('<li>')); $return .= '<li class="' . $this->selectedClass . '">'; } $return .= '<a href="' . rex_getUrl($newArticleId, $newClangId) . '">' . htmlspecialchars($cat->getName()) . '</a>'; break; case 8: // SEO42_URL_TYPE_CALL_FUNC $return .= call_user_func($urlData['func'], $cat); break; default: $return .= $defaultLink; break; } } else { $return .= $defaultLink; } } if (($this->showAll || $cat->getId() == $this->current_category_id || in_array($cat->getId(), $this->path)) && ($this->levelDepth > $depth || $this->levelDepth < 0)) { $return .= $this->_getNavigation($cat->getId()); } $depth--; $return .= '</li>'; } } } if (count($cats) > 0) { $return .= '</ul>'; } return $return; }