2016-06-01 138 views
2

我在codeigniter中的uri段遇到问题我期待开发产品和产品详细信息,所以我为它创建了一个控制器并传递了产品名称的参数以显示产品名称,因此我的url将变成了这个样子显示产品类别

本地主机/ PROJECT_NAME /产品/ PRODUCT_NAME

,这部分工作为我好,但我感到困惑。如果我想显示的产品类别和产品名称,比如我什么我试图让我的网址像这样

本地主机/ PROJECT_NAME /产品/ CATEGORY_NAME/PRODUCT_NAME

,所以我将如何做到这一点,现在当我通过在类别名称就说明了我404没有找到您请求未找到页面。因为有时会直接显示产品,有时如果用户通过类别浏览产品详细信息,那么类别名称将在URL中传递,以及这些区域是如何工作的?我有这个

这里大困惑是我的产品

public function products($product_name) { 
     if($this->uri->segment(3)) { 
      $category = ucwords(str_replace('-', " ", $product_name)); 
      $product = ucwords(str_replace('-', " ", $this->uri->segment(3))); 
     } else { 
      $product = ucwords(str_replace('-', " ", $product_name)); 
     } 

     $page_data = $this->get_data->get_Data($product, 'name', 'products'); 
     $data['title'] = 'Products - ' . $page_data->row()->name; 
     $data['body_class'] = 'poductsdetails'; 

     $this->load->view('includes/header.php', $data); 
     $this->load->view('templates/navigation.php'); 

     $data['content'] = array(
       'name'  => $page_data->row()->name, 
       'price'  => $page_data->row()->price, 
       'description' => $page_data->row()->description, 
       'picture'  => $page_data->row()->picture, 
       'category' => $page_data->row()->category, 
      ); 

     $this->load->view('products/details', $data); 
     $this->load->view('templates/footer-form.php'); 
     $this->load->view('includes/footer.php'); 
    } 

这里控制器是我的路我已经创建

$route['default_controller'] = 'home'; 
$route['admin']    = 'admin/index'; 
$route['admin/([a-z])']  = 'admin/$1'; 
$route['products/(:any)'] = 'home/products/$1'; 
$route['products/(:any)'] = 'home/products/$1/$2'; 
$route['products/(:any)'] = 'home/products/$1/$2/$3'; 
$route['(:any)']    = 'home/page/$1'; 
$route['(:any)']    = 'home/page/$1/$2'; 
+0

通过类别名称查看个别产品详细信息是没有用的 –

+0

嗯,这是我的客户的要求,他正在为seo目的而做,而我在这里被阻塞 –

回答

6

您刚才在路由中传递了一个参数就是为什么它不能找到

改变这样

$route['products/(:any)'] = 'home/products/$1'; 
$route['products/(:any)/(:any)'] = 'home/products/$1/$2'; 
$route['products/(:any)/(:any)/(:any)'] = 'home/products/$1/$2/$3'; 

它将工作路线。

+0

是的,它工作了谢谢你,你可以解释我about(:any)因为我知道产品将是文件夹名称,所以什么(:任何)指的是? –

+0

(:any)这是一个参数,它将以url形式作为产品或类别传递,比如添加$ 1或$ 2。 –

+0

非常感谢你有很多的知识谢谢 –

0

如果CATEGORY_NAME在该控制器定义的函数,那么试试这个

$route['products/category_name/(:any)'] = 'products/category_name/$1'; 
相关问题