Having dynamic routes driven out of the database - even with caching - sounds like a large amount of overhead to add to your application for very little gain (not to mention very error prone... users making the same routes for different information, for instance). Why not, instead, allow your users to create "shortcut" urls under their name or something?
/s/james/product1 Then in your "s" controller, you could do a redirect based on the deconstructed path. This would make it so each user can have their own shortcuts without interfering with other users, and it introduces far less overhead. Something to consider at least! - James On Mar 18, 8:42 am, dom111 <[email protected]> wrote: > Hi AD, > > Thanks for the speedy response, much appreciated! > > I totally agree with the point about database driven, caching the > routes is definitely the way to go and seems fairly simple to > implement (I think!). > > I also agree with keeping the routes simple, and I'd love to, maybe > I'll have to go to the regular method of /category/1/chocolate etc. > for example... > > I think the only reason I was looking at the more complex options was > to have the ability to store the current ID of the row, to enable > simple breadcrumbing and navigation generation. > > Perhaps I should just keep the two separate for the time being...? > > Thanks again for your help! > > Dom > > PS. > > Just out of interest, a site with the navigation style closest to what > I'm after is:http://www.nhm.ac.uk/ > > On Mar 18, 11:18 am, AD7six <[email protected]> wrote: > > > > > On Mar 18, 11:53 am, dom111 <[email protected]> wrote: > > > > Hi All, > > > > I'm relatively new to Cake as a framework, but compared to the others > > > I've looked at, it ticks the boxes that I've been looking for, so > > > thanks for all the hard work the team has put in! > > > > I've got a pretty specific issue, and one I'm not finding a lot of > > > information on (maybe I'm not looking in the right places, I hope I > > > haven't missed a discussion in here...), and I'm hoping it's not > > > because it's too hard to do... > > > > It's regarding routes, and as the subject suggests, dynamic database- > > > driven ones... > > > > I'm currently working on a site that can handle a dynamic admin- > > > managed hierarchy, with customisable URLs and the ability to link the > > > same information in many places, building the correct breadcrumbs/ > > > navigation. Maybe I'm the only person crazy enough to think of it, but > > > I'd like to think not... > > > > What I'd like to do is match the following URLs (for example): > > > > / => pages->index() > > > > // shop data > > > /shop => shop->index() > > > /shop/food => shop->section('food') or sections->view('food') > > > /shop/food/banana => shop->product('banana') or products->view > > > ('banana') > > > /shop/food/chocolate => shop->section('chocolate') or sections->view > > > ('chocolate') > > > /shop/food/chocolate/mars-bar => shop->product('mars-bar') or products- > > > > >view('mars-bar') > > > > // static pages > > > /pages/about => pages->view('about') > > > /pages/about/opening-times => pages->view('opening-times') > > > > // 'modules' eg. more processing to manage than a static page: contact > > > validation/emailing/database > > > /pages/about/donate => modules->load('donate') > > > /pages/about/contact-us => modules->load('contact-us') > > > > Also, it'd be nice (but to avoid making things even more complicated, > > > not essential) to have /shop/food/choclate/search.html or filter.html > > > to redirect to the shop-> > > > > I know I could easily hard-code all the hierarchy, but I need to give > > > the ability to re-arrange the sections to the site administrator. > > > > The attempts I've had so far, have yielded less than successful > > > results... > > > > I created a Route model in which the structure was: > > > > id int(11) auto_increment > > > pattern varchar(255) > > > controller varchar(255) > > > action varchar(255) > > > permalink varchar(255) > > > left int(11) > > > right int(11) > > > parent_id int(11) > > > > The pattern field contained the route string as used by Cake eg: > > > > pattern '/' > > > controller 'pages' > > > action 'index' > > > permalink '' > > > > or > > > > pattern '/shop/food/chocolate' > > > controller 'sections' > > > action 'view' > > > permalink 'chocolate' > > > > or > > > > pattern '/shop/food/chocolate/:permalink' > > > controller 'products' > > > action 'view' > > > permalink NULL (which would use the :permalink in the URL I believe) > > > > I'm thinking that this would work if I added a flag indicating if the > > > row was related to a shop section so that extra processing could be > > > done in the routes.php file to add /section-name/:permalink to > > > redirect to product->view(). The routes.php file I managed like so: > > > > foreach (ClassRegistry::init('Routes')->find('all', array('order' => > > > 'LENGTH(`pattern`) DESC')) as $data) { > > > extract($data['Routes']); > > > > // set up the route > > > Router::connect( > > > $pattern, > > > array( > > > 'controller' => $controller, > > > 'action' => $action, > > > 'permalink' => $permalink > > > ), > > > array( > > > 'pass' => array( > > > 'permalink' > > > ) > > > ) > > > ); > > > > but it feels a bit too 'hacky' and I'd like to check first that > > > there's no other way to address the issue. > > > > Another way I've thought to try is to create a routing 'controller' > > > that parses the url but if I were to redirect all requests to that > > > controller, would it be easy enough, or even good practice, to call > > > another controller and it's action from within the main routing class. > > > It all feels wrong! > > > > I wouldn't mind rewriting the router also, which is another thought I > > > had, but again, is there a correct protocol to follow before undoing > > > all the good work done thus far? > > > > If anyone has any suggestions, resources or even encouragement, it > > > would all be very much appreciated! > > > > Apologies if I've missed an existing discussion or if my rambling is > > > too incomprehensible! > > > Wanting to be able to create (as an admin user) a specific url for > > some content seems 'normal' but wanting to make the entire routing > > system work that way is likely to make things way too slow. > > > For one off pages, you'd just call Router::connect for them before > > your other routes (probably via aftersave -> save routes to a file, > > begining of routes.php check for your admin-created routes file). > > > For the general case why not consider something like: > > Router::connect('/pages/*', array('controller' => 'pages', 'action' => > > 'display')); > > ( > > Router::connect('/products/:id/*', array('controller' => 'products', > > 'action' => 'view')); // append whatever slug/seo fluff you like > > OR > > Router::connect('/p/*', array('controller' => 'products', 'action' => > > 'view')); // append whatever slug/seo fluff you like - last one being > > the product slug > > ) > > ( > > Router::connect('/category/:id/*', array('controller' => 'category', > > 'action' => 'view')); // append whatever slug/seo fluff you like > > OR > > Router::connect('/c/*', array('controller' => 'category', 'action' => > > 'view')); // append whatever slug/seo fluff you like - last one being > > the category slug > > ) > > > IMO the key to mastering/having simple routes is to always have > > something fixed ('e.g. /p/') in the route to make matches easy find/ > > debug/etc. . Making Routes themselves db dependent is a recipe for > > slowness and general disaster ( what happens if the db goes > > offline? ). > > > hth, > > > AD --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "CakePHP" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/cake-php?hl=en -~----------~----~----~----~------~----~------~--~---
