function DJClassifiedsBuildRoute(&$query) { $segments = array(); $app = JFactory::getApplication(); $menu = $app->getMenu('site'); $par = JComponentHelper::getParams('com_djclassifieds'); if (empty($query['Itemid'])) { $menuItem = $menu->getActive(); } else { $menuItem = $menu->getItem($query['Itemid']); } $option = empty($menuItem->component) ? null : $menuItem->component; $mView = empty($menuItem->query['view']) ? null : $menuItem->query['view']; $mLayout = empty($menuItem->query['layout']) ? null : $menuItem->query['layout']; $mCatid = empty($menuItem->query['cid']) ? null : (int) $menuItem->query['cid']; $mId = empty($menuItem->query['id']) ? null : (int) $menuItem->query['id']; $view = !empty($query['view']) ? $query['view'] : null; $layout = !empty($query['layout']) ? $query['layout'] : null; $cid = !empty($query['cid']) ? $query['cid'] : null; $id = !empty($query['id']) ? $query['id'] : null; $se = !empty($query['se']) ? $query['se'] : null; $uid = !empty($query['uid']) ? $query['uid'] : null; $order = !empty($query['order']) ? $query['order'] : null; $menuDefault = $menu->getDefault(); // 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_djclassifieds') { if ($view == 'item') { if ($view != $mView) { $segments[] = $par->get('seo_view_item', 'ad'); } unset($query['view']); if ($view == $mView && intval($id) > 0 && intval($id) == $mId) { unset($query['id']); unset($query['cid']); } else { if ($mView == 'items' && intval($id) > 0) { if (intval($cid) != intval($mCatid)) { $segments[] = DJClassifiedsSEO::getURLfromSlug($cid); } $segments[] = DJClassifiedsSEO::getURLfromSlug($id); unset($query['id']); unset($query['cid']); } } } else { if ($view == 'items') { if ($view != $mView) { $segments[] = $par->get('seo_view_items', 'ads'); } if ($cid === null) { $cid = '0:all'; } if (intval($cid) != intval($mCatid)) { //$segments[] = $cid; $segments[] = DJClassifiedsSEO::getURLfromSlug($cid); } unset($query['cid']); } elseif ($query['view'] == 'edititem') { if ($view != $mView) { $segments[] = $par->get('seo_view_edititem', 'edititem'); } if (isset($query['id'])) { $segments[] = $query['id']; unset($query['id']); } } elseif ($query['view'] == 'additem') { if ($view != $mView) { $segments[] = $par->get('seo_view_additem', 'additem'); } } elseif ($query['view'] == 'useritems') { if ($view != $mView) { $segments[] = $par->get('seo_view_useritems', 'useritems'); } } elseif ($query['view'] == 'categories') { if ($view != $mView) { $segments[] = $par->get('seo_view_categories', 'categories'); } } elseif ($query['view'] == 'payment') { $segments[] = 'payment'; } elseif ($query['view'] == 'points') { $segments[] = 'points'; } elseif ($query['view'] == 'userpoints') { $segments[] = 'userpoints'; } elseif ($query['view'] == 'renewitem') { $segments[] = 'renewitem'; if (isset($query['id'])) { $segments[] = $query['id']; unset($query['id']); } } else { if ($view == 'profile') { $segments[] = $par->get('seo_view_profile', 'profile'); if (isset($query['uid'])) { $segments[] = DJClassifiedsSEO::getURLfromSlug($uid); } unset($query['uid']); } elseif ($query['view'] == 'profileedit') { if ($view != $mView) { $segments[] = $par->get('seo_view_profileedit', 'profileedit'); } } } } unset($query['view']); if ($layout != $mLayout && $layout) { $segments[] = $layout; } unset($query['layout']); if ($mCatid === null) { $mCatid = '0:all'; } if ($mView == $view && $mLayout == $layout && $mCatid == $cid && ($se || $order || $uid) && $menuDefault->id == $menuItem->id) { $segments[] = 'all'; } } return $segments; }