Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

CodeIgniter, dynamic menu and routes

Posted on 2015-01-01
9
Medium Priority
?
869 Views
Last Modified: 2015-01-09
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_name 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.
0
Comment
Question by:Marco Gasi
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 4
9 Comments
 
LVL 43

Expert Comment

by:Rob
ID: 40527396
Hi Marco,

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
0
 
LVL 31

Author Comment

by:Marco Gasi
ID: 40527404
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
0
 
LVL 43

Accepted Solution

by:
Rob earned 2000 total points
ID: 40527410
Then you'll have to statically set the routes for the categories as im sure you'll have other non product pages such as

www.example.com/about
www.example.com/contact
...

OR

statically set the about, contact etc pages and a catch all at the bottom relating to your products but really you should have the following structure

www.example.com/products/cat/subcat
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 31

Author Comment

by:Marco Gasi
ID: 40527415
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...
0
 
LVL 43

Expert Comment

by:Rob
ID: 40527699
See here for how they're passed to your controller functions: https://ellislab.com/codeigniter/user-guide/general/controllers.html#passinguri
0
 
LVL 31

Author Comment

by:Marco Gasi
ID: 40536295
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
0
 
LVL 43

Expert Comment

by:Rob
ID: 40537613
By all means test it.  I'll be here if you have any questions :)
0
 
LVL 31

Author Comment

by:Marco Gasi
ID: 40540387
Well, it seems to work:

routes.php:
$route['products/(.+)?/(.+)?'] = 'Products/process_data/$1/$2';

Open in new window


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();
}

Open in new window


This way I should be able to process all requests. On to the next and thank you for your fruitful help!
Cheers
0
 
LVL 31

Author Closing Comment

by:Marco Gasi
ID: 40540390
Thank you again
0

Featured Post

New feature and membership benefit!

New feature! Upgrade and increase expert visibility of your issues with Priority Questions.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Password hashing is better than message digests or encryption, and you should be using it instead of message digests or encryption.  Find out why and how in this article, which supplements the original article on PHP Client Registration, Login, Logo…
Since pre-biblical times, humans have sought ways to keep secrets, and share the secrets selectively.  This article explores the ways PHP can be used to hide and encrypt information.
Learn how to match and substitute tagged data using PHP regular expressions. Demonstrated on Windows 7, but also applies to other operating systems. Demonstrated technique applies to PHP (all versions) and Firefox, but very similar techniques will w…
The viewer will learn how to look for a specific file type in a local or remote server directory using PHP.

722 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question