Marco Gasi
asked on
CodeIgniter, dynamic menu and routes
Hi all.
Well, so is my first question in 2015. I'm a CodeIgniter novice and I want to use it to develop a catalogue site for a client.
I have the database with three tables: products, categories and subcategories. I build the menu using categories and subcategories and using the category_name and the category_name/category_nam e as slug. Nothing special, I guess.
the question is: what are the methods I have to configure route to accept these slugs? I wuld like some authomatism so when the client add a new category or a new subcategory, the new slug is automatically added to the routes.php.
Iguess I can write a small piece of code in the CMS, so when a new element is added the riutes.php file is updated, bit I wonder if there is some better way to do it.
Thanks to all in advance.
Well, so is my first question in 2015. I'm a CodeIgniter novice and I want to use it to develop a catalogue site for a client.
I have the database with three tables: products, categories and subcategories. I build the menu using categories and subcategories and using the category_name and the category_name/category_nam
the question is: what are the methods I have to configure route to accept these slugs? I wuld like some authomatism so when the client add a new category or a new subcategory, the new slug is automatically added to the routes.php.
Iguess I can write a small piece of code in the CMS, so when a new element is added the riutes.php file is updated, bit I wonder if there is some better way to do it.
Thanks to all in advance.
ASKER
Hi Rob, thank you for quick reply.
I'll read the link, but I wish to know if this could work: I could use only one controller, one model and one view to display products; here the code could serve different contents accordingly to the parameters: is this the right way?
I could place only one row in the routes.php, let's say something like
$route[<-- regex here -->] = 'products/$1';
where $1 is parameters to pass to the controler->to the model to extract data from database.
But my links are www.example.com/Furnitures/Bedroom so I have to pass both parameters, Furnitures as category and Bedrooms as subcategory to serve a page which lists all products in that subcategory. So in routes.php I place only one $1 which represents all parameters, is it right?
I realize the question is a bit confusing, but I can't tell it better, at this moment
I'll read the link, but I wish to know if this could work: I could use only one controller, one model and one view to display products; here the code could serve different contents accordingly to the parameters: is this the right way?
I could place only one row in the routes.php, let's say something like
$route[<-- regex here -->] = 'products/$1';
where $1 is parameters to pass to the controler->to the model to extract data from database.
But my links are www.example.com/Furnitures/Bedroom so I have to pass both parameters, Furnitures as category and Bedrooms as subcategory to serve a page which lists all products in that subcategory. So in routes.php I place only one $1 which represents all parameters, is it right?
I realize the question is a bit confusing, but I can't tell it better, at this moment
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Yes, the idea is to set statically static pages such as home and contacts and set dinamically the other. In effect, I can have a structure liek the one yo said (products/cat/subcat). I have to take some time to read manuals about how to manage parameters...
See here for how they're passed to your controller functions: https://ellislab.com/codeigniter/user-guide/general/controllers.html#passinguri
ASKER
Hi, Rob. I'm sorry for the delay, I haven't abandoned this question but I've been tto busy in other aspects of my project I had to complete more urgently. In the next day I'll come back to this: I have just to do some test to see if I understood the right way before to award points and to close this question.
Cheers
Cheers
By all means test it. I'll be here if you have any questions :)
ASKER
Well, it seems to work:
routes.php:
The controller Products.php:
This way I should be able to process all requests. On to the next and thank you for your fruitful help!
Cheers
routes.php:
$route['products/(.+)?/(.+)?'] = 'Products/process_data/$1/$2';
The controller Products.php:
public function process_data($data)
{
/*only to test*/
echo "<pre>Process data data<br>";
var_dump($data);
echo "</pre>";
}
public function _remap($method, $params = array())
{
$map = array();
foreach ($params as $p)
{
$map[] = $p;
}
if( $method[0] != '_' && method_exists( $this, $method ))
{
return $this->$method( $map );
}
show_404();
}
This way I should be able to process all requests. On to the next and thank you for your fruitful help!
Cheers
ASKER
Thank you again
I haven't done this in codeigniter (in cakePHP I used mod_rewrite) but I do know you should be able to use regular expressions in the route
e.g.
$route['product/(:any)'] = "catalog/product_lookup";
Where the url would be passed to your controller function 'product_lookup'.
See here for more info: https://ellislab.com/codeigniter/user-guide/general/routing.html