示例#1
0
 /**
  * Build method for URLs
  * This method is meant to transform the query parameters into a more human
  * readable form. It is only executed when SEF mode is switched on.
  *
  * @param   array  &$query  An array of URL arguments
  *
  * @return  array  The URL arguments to use to assemble the subsequent URL.
  *
  * @since   3.3
  */
 public function build(&$query)
 {
     //error_log("IN AkrecipesRouter::build query == " . print_r($query,true));
     // $e = new Exception() ;
     // //error_log($e->getTraceAsString());
     $segments = array();
     $view = null;
     $mView = null;
     $id = null;
     $mId = null;
     $menuItem = null;
     if ($query['option'] != 'com_akrecipes') {
         return $segments;
     }
     // We need a menu item.  Either the one specified in the query, or the current active one if none specified
     if (empty($query['Itemid'])) {
         $menuItem = $this->menu->getActive();
         $menuItemGiven = false;
     } else {
         $menuItem = $this->menu->getItem($query['Itemid']);
         $menuItemGiven = true;
     }
     // Check again
     if ($menuItemGiven && isset($menuItem) && $menuItem->component != 'com_akrecipes') {
         $menuItemGiven = false;
         unset($query['Itemid']);
     }
     $mView = empty($menuItem->query['view']) ? null : $menuItem->query['view'];
     $mId = empty($menuItem->query['id']) ? null : $menuItem->query['id'];
     if (is_array($mId)) {
         JArrayHelper::toInteger($mId);
     }
     if (!isset($query['view'])) {
         return $segments;
     }
     // Are we dealing with an article or category that is attached to a menu item?
     if ($menuItem instanceof stdClass && $menuItem->query['view'] == $query['view'] && isset($query['id']) && $menuItem->query['id'] == (int) $query['id']) {
         unset($query['view']);
         if (isset($query['catid'])) {
             unset($query['catid']);
         }
         if (isset($query['layout'])) {
             unset($query['layout']);
         }
         unset($query['id']);
         return $segments;
     }
     $view = $query['view'];
     unset($query['view']);
     if (!$menuItemGiven && $view != 'recipe') {
         $segments[] = $view;
     }
     //$model      = AkrecipesFrontendHelper::getModel($view);
     if (isset($query['id'])) {
         $id = $query['id'];
         unset($query['id']);
     } else {
         $app = JFactory::getApplication();
         $id = $app->input->getInt('id');
     }
     // empty id , no SEF to be done. just return
     if (empty($id) or is_null($id)) {
         return $segments;
     }
     switch ($view) {
         case 'recipes':
             // category view
             $categories = JCategories::getInstance('Akrecipes');
             $category = $categories->get($id);
             if (is_null($category)) {
                 return $segments;
             }
             $catPath = $category->getPath();
             if (is_array($catPath)) {
                 foreach ($catPath as $key => $value) {
                     list($id, $path) = explode(':', $value, 2);
                     $segments[] = $path;
                 }
             }
             unset($query['task']);
             unset($query['layout']);
             break;
         case 'recipe':
             // $model      = AkrecipesFrontendHelper::getModel($view);
             // if ( $model !== null) {
             // 	$item       = $model->getData($id);
             // 	$alias      = $model->getAliasFieldNameByView($view);
             // 	$segments[] = $item->$alias;
             // 	unset($query['task']);
             // 	unset($query['catid']) ;
             // }
             if ($id) {
                 $alias = AkrecipesFrontendHelper::getItemAlias($id);
                 $segments[] = $alias;
                 unset($query['task']);
                 unset($query['catid']);
             }
             break;
         case 'recipesbyuser':
             $user = JFactory::getUser($id);
             $segments[] = 'author';
             $segments[] = str_replace(' ', '-', strtolower($user->name));
             unset($query['task']);
             unset($query['layout']);
             break;
         case 'contests':
             $segments[] = 'contests';
             unset($query['task']);
             unset($query['layout']);
             unset($query['Itemid']);
             break;
         case 'contest':
             $segments[] = 'contests';
             // $model      = AkrecipesFrontendHelper::getModel($view);
             // if ( $model !== null) {
             // 	$item       = $model->getData($id);
             // 	$alias      = $model->getAliasFieldNameByView($view);
             // 	$segments[] = $item->$alias;
             // 	unset($query['task']);
             // 	unset($query['id']) ;
             // }
             if ($id) {
                 $alias = AkrecipesFrontendHelper::getItemAlias($id, 'contests');
                 $segments[] = $alias;
                 unset($query['task']);
                 unset($query['catid']);
             }
             break;
         case 'brands':
             $segments[] = 'brands';
             unset($query['task']);
             unset($query['layout']);
             unset($query['Itemid']);
             break;
         case 'brand':
             $segments[] = 'brands';
             // $model      = AkrecipesFrontendHelper::getModel($view);
             // if ( $model !== null) {
             // 	$item       = $model->getData($id);
             // 	//$alias      = $model->getAliasFieldNameByView($view);
             // 	$segments[] = $item->alias;
             // 	unset($query['task']);
             // 	unset($query['id']) ;
             // }
             if ($id) {
                 $alias = AkrecipesFrontendHelper::getItemAlias($id, 'brands');
                 $segments[] = $alias;
                 unset($query['task']);
                 unset($query['catid']);
             }
             break;
         default:
             break;
     }
     //error_log("segments --> " . print_r($segments,true));
     return $segments;
 }