/** * Get routed links for categories */ static function getCategoryRoute($catid, $_Itemid = 0, $urlvars = array(), $category = null) { $Itemid = $_Itemid == -1 ? 0 : $_Itemid; // -1 indicates to return the found menu Itemid instead of the produced link // Calculate later only if needed static $component_default_menuitem_id = null; static $layout_default_menuitem_ids = null; static $current_language = null; if ($current_language === null) { $current_language = JFactory::getLanguage()->getTag(); // Current language tag for J2.5+ but not for J1.5 } static $use_language = null; if ($use_language === null) { $use_language = JLanguageMultilang::isEnabled(); if ($use_language) { self::_buildLanguageLookup(); } } global $globalcats; $_catid = (int) $catid; // ************************************** // Get data of the FLEXIcontent category // data like: language, and ancestors ids // ************************************** // Get language $language = $category && !empty($category->language) ? $category->language : null; if (!$language) { $language = isset($globalcats[$_catid]->language) ? $globalcats[$_catid]->language : $current_language; } // Get item's parent categores to be used in search a menu item of type category view $parents_ids = array(); if ($_catid && isset($globalcats[$_catid]->ancestorsarray)) { $parents_ids = array_reverse($globalcats[$_catid]->ancestorsarray); } // ********************************************************** // Create the needles for table lookup in descending priority // ********************************************************** $needles = array(); // Category view menu items of given category ID ... and then parent categories in ascending order $needles['category'] = $parents_ids; // Directory view menu items starting at given category ID ... and then parent categories in ascending order $needles['flexicontent'] = $parents_ids; // If layout is set, then add cid: 0 (indexes: LayoutID_0), -1 (indexes: 0_0) as last needles $layout = !empty($urlvars['layout']) ? $urlvars['layout'] : false; if ($layout) { $needles['category'][] = 0; $needles['category'][] = -1; } // *************** // Create the link // *************** $link = 'index.php?option=com_flexicontent&view=category'; if ($_catid) { $link .= '&cid=' . $catid; } // Other data to pass to _findCategory() $data = array(); // Append given variables foreach ($urlvars as $varname => $varval) { if ($varval) { $link .= '&' . $varname . '=' . $varval; } else { unset($urlvars[$varname]); } } $data['urlvars'] = $urlvars; // use SEF language code as so configured $data['language'] = '*'; // Default to ALL if ($use_language && $language && $language != "*") { if (isset(self::$lang_lookup[$language])) { if (self::$add_url_lang && isset(self::$interface_langs[$language])) { $link .= '&lang=' . self::$lang_lookup[$language]; } $data['language'] = $language; } } // USE the itemid provided, if we were given one it means it is "appropriate and relevant" if ($Itemid) { $link .= '&Itemid=' . $Itemid; } else { if ($menuitem = FlexicontentHelperRoute::_findCategory($needles, $data)) { $Itemid = $menuitem->id; $link .= '&Itemid=' . $Itemid; // Special handly if directory view was matched if ($menuitem->query['view'] == 'flexicontent') { $link = str_replace('view=category', 'view=flexicontent', $link); $link = str_replace('cid=', 'rootcat=', $link); } } else { $layout = !empty($urlvars['layout']) ? $urlvars['layout'] : false; if ($layout && $layout_default_menuitem_ids === null) { $layout_default_menuitem_ids = FlexicontentHelperRoute::_setLayoutDefaultMenuitemIds(); } if ($layout && !empty($layout_default_menuitem_ids[$layout])) { $Itemid = $layout_default_menuitem_ids[$layout]; } else { if ($component_default_menuitem_id === null) { $component_default_menuitem_id = FlexicontentHelperRoute::_setDefaultMenuitemId(); } $Itemid = (int) $component_default_menuitem_id; // if false (aka not set) then it will be typecasted to ZERO } if ($Itemid) { $link .= '&Itemid=' . $Itemid; } } } // Return menu Itemid or the produced link return $_Itemid == -1 ? $Itemid : $link; }