/** * Returns link to category view * @param JCategoryNode $catid * @param number $language * @return string */ public static function getCategoryRoute($catid, $language = 0) { if ($catid instanceof JCategoryNode) { $id = $catid->id; $category = $catid; } else { throw new Exception('First parameter must be JCategoryNode'); } $catviews = FbHelper::getCategoryViews(); $extensionviews = array_flip($catviews); $view = $extensionviews[$category->extension]; if ($id < 1) { $link = ''; } else { //Create the link $link = 'index.php?option=com_fb&view=' . $view . '&category=' . $category->slug; $needles = array($view => array($id), 'category' => array($id)); if ($language && $language != "*" && JLanguageMultilang::isEnabled()) { $db = JFactory::getDbo(); $query = $db->getQuery(true)->select('a.sef AS sef')->select('a.lang_code AS lang_code')->from('#__languages AS a'); $db->setQuery($query); $langs = $db->loadObjectList(); foreach ($langs as $lang) { if ($language == $lang->lang_code) { $link .= '&lang=' . $lang->sef; $needles['language'] = $language; } } } if ($item = self::_findItem($needles, 'category')) { $link .= '&Itemid=' . $item; } else { if ($category) { $catids = array_reverse($category->getPath()); $needles = array('category' => $catids); if ($item = self::_findItem($needles, 'category')) { $link .= '&Itemid=' . $item; } elseif ($item = self::_findItem(null, 'category')) { $link .= '&Itemid=' . $item; } } } } return $link; }
function FbParseRoute($segments) { $vars = array(); $catviews = FbHelper::getCategoryViews(); $extensionviews = array_flip($catviews); $listviews = array_keys($catviews); //Get the active menu item. $app = JFactory::getApplication(); $params = JComponentHelper::getParams('com_fb'); $advanced = $params->get('sef_advanced_link', 0); $menu = $app->getMenu(); $item = $menu->getActive(); // Count route segments $count = count($segments); // Standard routing if (!isset($item)) { $vars['view'] = $segments[0]; $isList = in_array($vars['view'], $listviews); if ($isList && $count > 1) { $vars['category'] = $segments[$count - 1]; } elseif (!$isList && $count > 1) { $vars['id'] = $segments[$count - 1]; } return $vars; } if (count($segments > 0)) { $vars['view'] = $segments[0]; switch ($vars['view']) { case 'fb': $id = explode(':', $segments[1]); $vars['id'] = (int) $id[0]; break; } } else { $vars['view'] = $segments[0]; } // End count(segments) statement return $vars; }