2016-06-01 2 views
2

У меня возникли проблемы с сегментами uri в codeigniter. Я ищу для разработки продуктов и деталей продукта, поэтому я создал контроллер для него и передал параметр имени продукта, чтобы показать имя продукта в URL-адресе, поэтому мой URL-адрес будет уподобиться этойотображение продуктов с категориями

локальный/project_name/продукты/PRODUCT_NAME

и эта часть работает нормально для меня, но я запутался о том, что если я хотел бы показать, как категории продуктов и название продукта, как я я пытаюсь сделать мой url вот так

локальный/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

Да, это сработало спасибо, вы можете мне объяснить (: any) как я знаю, продукты будут именем папки, на что ссылается (: any)? –

+0

(: any) Это параметр, который будет передаваться в URL-адресе как продукт или категория, например, вы добавляете $ 1 или $ 2. –

+0

большое спасибо, что у вас много знаний спасибо –

0

если category_name является функция, определенная в этом контроллере, то попробуйте это

$route['products/category_name/(:any)'] = 'products/category_name/$1'; 
Смежные вопросы