function DJCatalog2BuildRoute(&$query) { $segments = array(); $app = JFactory::getApplication(); $menu = $app->getMenu('site'); $params = JComponentHelper::getParams('com_djcatalog2'); $component_views = array('items' => 'items', 'item' => 'item', 'producer' => 'producer', 'myitems' => 'myitems', 'itemform' => 'itemform', 'producers' => 'producers', 'cart' => 'cart', 'orders' => 'orders', 'order' => 'order', 'checkout' => 'checkout', 'query' => 'query'); foreach ($component_views as $view_name => $seotag) { $alias = $params->get('seo_' . $view_name . '_view', $view_name); $alias = JApplication::stringURLSafe($alias); if (trim(str_replace('-', '', $alias)) != '') { $component_views[$view_name] = trim($alias); } } $default_menu = $menu->getDefault(); $menuItem = null; if (empty($query['Itemid'])) { //JLog::add(' empty Itemid '.print_r($query, true)); unset($query['Itemid']); $menuItem = $menu->getActive(); } else { //JLog::add(' NOT empty Itemid '.print_r($query, true)); $menuItem = $menu->getItem($query['Itemid']); } //JLog::add(' menu Item '.@$menuItem->component.' '.print_r(@$menuItem->query,true).' -----------------------'); //$option = (empty($menuItem->component)) ? null : $menuItem->component; $mView = empty($menuItem->query['view']) ? null : $menuItem->query['view']; $mCatid = empty($menuItem->query['cid']) ? null : (int) $menuItem->query['cid']; $mProdid = empty($menuItem->query['pid']) ? null : (int) $menuItem->query['pid']; $mId = empty($menuItem->query['id']) ? null : (int) $menuItem->query['id']; $view = !empty($query['view']) ? $query['view'] : null; $cid = !empty($query['cid']) ? $query['cid'] : null; $pid = !empty($query['pid']) ? $query['pid'] : null; $id = !empty($query['id']) ? $query['id'] : null; $task = !empty($query['task']) ? $query['task'] : null; // JoomSEF bug workaround if (isset($query['start']) && isset($query['limitstart'])) { if ((int) $query['limitstart'] != (int) $query['start'] && (int) $query['start'] > 0) { // let's make it clear - 'limitstart' has higher priority than 'start' parameter, // however ARTIO JoomSEF doesn't seem to respect that. $query['start'] = $query['limitstart']; unset($query['limitstart']); } } // JoomSEF workaround - end //if ($view && $option == 'com_djcatalog2') { if ($view) { if ($view != $mView || empty($query['Itemid'])) { $segments[] = $view; } unset($query['view']); if ($view == 'item') { if ($view == $mView && intval($id) > 0 && intval($id) == $mId) { unset($query['id']); unset($query['cid']); } else { if (($mView == 'items' || $mView === null) && intval($id) > 0) { if (intval($cid) != intval($mCatid)) { $segments[] = (int) $cid == 0 ? 'all' : DJCatalogHelperRoute::formatAlias($cid); } $segments[] = DJCatalogHelperRoute::formatAlias($id); unset($query['id']); unset($query['cid']); } } } if ($view == 'items') { if ($cid === null) { $cid = '0'; } if (intval($cid) != intval($mCatid)) { $segments[] = (int) $cid == 0 ? 'all' : DJCatalogHelperRoute::formatAlias($cid); } else { if ($menuItem->id == $default_menu->id && (int) $cid == 0 && (isset($query['cm']) || isset($query['ind']) || (int) $mProdid != (int) $pid)) { $segments[] = 'all'; } } unset($query['cid']); if (isset($query['pid']) && $query['pid'] === '' || intval($mProdid) == intval($pid)) { unset($query['pid']); } } if ($view == 'producer') { if (!($view == $mView && intval($pid) > 0 && intval($pid) == $mProdid) && $mView != 'producer') { $segments[] = DJCatalogHelperRoute::formatAlias($pid); } unset($query['pid']); } if ($view == 'itemform') { if (intval($id) > 0) { $segments[] = $id; unset($query['id']); } } } if (!empty($segments[0]) && array_key_exists($segments[0], $component_views)) { $segments[0] = $component_views[$segments[0]]; } return $segments; }