Exemple #1
0
	/**
	 * Get routed links for categories
	 */
	static function getCategoryRoute($catid, $Itemid = 0, $urlvars = array())
	{
		static $component_default_menuitem_id = null;  // Calculate later only if needed
		
		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 = FLEXI_J16GE && 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 = 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;
		
		
		// ***************
		// Create the link
		// ***************
		
		$link = 'index.php?option=com_flexicontent&view=category&cid='.$catid;
		
		// Other data to pass to _findCategory()
		$data = array();
		
		// Append given variables
		foreach ($urlvars as $varname => $varval) $link .= '&'.$varname.'='.$varval;
		$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;
		}
		
		// Try to find the most appropriate/relevant menu item, using the priority set via needles array
		else if ($menuitem = FlexicontentHelperRoute::_findCategory($needles, $data)) {
			$link .= '&Itemid='.$menuitem->id;
			// 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);
			}
		}
		
		// Try to use component's default menu item, this is according to COMPONENT CONFIGURATION and includes ACTIVE menu item if appropriate
		else {
			if ($component_default_menuitem_id === null)
				$component_default_menuitem_id = FlexicontentHelperRoute::_setDefaultMenuitemId();
			if ($component_default_menuitem_id)
				$link .= '&Itemid='.$component_default_menuitem_id;
		}
		
		return $link;
	}
 /**
  * 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;
 }