function getTagRoute($tag) { $needles = array('tag' => $tag); $link = 'index.php?option=com_k2&view=itemlist&task=tag&tag=' . urlencode($tag); if ($item = K2HelperRoute::_findItem($needles)) { $link .= '&Itemid=' . $item->id; } return $link; }
public static function _findItem($needles) { $component = JComponentHelper::getComponent('com_k2'); $application = JFactory::getApplication(); $menus = $application->getMenu('site', array()); if (K2_JVERSION != '15') { $items = $menus->getItems('component_id', $component->id); } else { $items = $menus->getItems('componentid', $component->id); } $match = null; foreach ($needles as $needle => $id) { if (count($items)) { foreach ($items as $item) { // Detect multiple K2 categories link and set the generic K2 link ( if any ) if (@$item->query['view'] == 'itemlist' && @$item->query['task'] == '') { if (!isset(self::$multipleCategoriesMapping[$item->id])) { if (K2_JVERSION == '15') { $menuparams = explode("\n", $item->params); foreach ($menuparams as $param) { if (strpos($param, 'categories=') === 0) { $array = explode('categories=', $param); $item->K2Categories = explode('|', $array[1]); } } if (!isset($item->K2Categories)) { $item->K2Categories = array(); } } else { $menuparams = json_decode($item->params); $item->K2Categories = isset($menuparams->categories) ? $menuparams->categories : array(); } self::$multipleCategoriesMapping[$item->id] = $item->K2Categories; if (count($item->K2Categories) === 0) { self::$anyK2Link = $item; } } } if ($needle == 'user' || $needle == 'category') { if (@$item->query['task'] == $needle && @$item->query['id'] == $id) { $match = $item; break; } } else { if ($needle == 'tag') { if (@$item->query['task'] == $needle && @$item->query['tag'] == $id) { $match = $item; break; } } else { if (@$item->query['view'] == $needle && @$item->query['id'] == $id) { $match = $item; break; } } } if (!is_null($match)) { break; } } // Second pass [START] // Only for multiple categories links. Triggered only if we do not have find any match (link to direct category) if (is_null($match) && $needle == 'category') { foreach ($items as $item) { if (@$item->query['view'] == 'itemlist' && @$item->query['task'] == '') { if (isset(self::$multipleCategoriesMapping[$item->id]) && is_array(self::$multipleCategoriesMapping[$item->id])) { foreach (self::$multipleCategoriesMapping[$item->id] as $catid) { if ((int) $catid == $id) { $match = $item; break; } } } if (!is_null($match)) { break; } } } } // Second pass [END] } if (!is_null($match)) { break; } } if (is_null($match)) { // Try to detect any parent category menu item.... if ($needle == 'category') { if (is_null(self::$tree)) { K2Model::addIncludePath(JPATH_SITE . '/components/com_k2/models'); $model = K2Model::getInstance('Itemlist', 'K2Model'); self::$model = $model; self::$tree = $model->getCategoriesTree(); } $parents = self::$model->getTreePath(self::$tree, $id); if (is_array($parents)) { foreach ($parents as $categoryID) { if ($categoryID != $id) { $match = K2HelperRoute::_findItem(array('category' => $categoryID)); if (!is_null($match)) { break; } } } } } if (is_null($match) && !is_null(self::$anyK2Link)) { $match = self::$anyK2Link; } } return $match; }
public static function getSearchRoute() { $needles = array('search' => 'search'); $link = 'index.php?option=com_k2&view=itemlist&task=search'; if ($item = K2HelperRoute::_findItem($needles)) { $link .= '&Itemid=' . $item->id; } return $link; }