Op dinsdag 27 december 2005 17:21, schreef Dries Buytaert:
This way we need no extra hooks, no extra variables, and no extra memory. Or hardly, anyway. While it saves a lot of code.
Erm. Does that imply that each page should be in the 'menu tree'?
No. Hence the %foo tokens. Similar to locale replacement
How does the system knows that 'project/foo' is node 42 of type project, that 'blog/2005/12/27/hello_world' is node 69 of type blog, or that 'about' is node 1 of type page? And vice versa, that node 42 is 'project/foo', that node 69 is 'blog/2005/12/27/hello_world' or that node 1 is 'about'?
It does, because menu knows so. 'blog/2005/12/27/hello_world' Let me try to explain:). One way is rather easy: blogfurls.module: function blogfurls_menu() { $items[] = array('title' => 'blog thing', 'original_path' => '/blog/%year/%month/%day/%title', 'original_replace' => array('%year' =>'$obj->year', ..., '%title' => '$obj->title'), // NOTE '$obj->year' is a string! note the ' '. 'callback' => 'blogfurls_show_blog', ... } function blogfurls_show_blog() { global $menu $args['title'] = arg(4); $args['date'] = make_date_from_url(arg(1), ...,arg(3)); $node = node_load($args); return theme('node', $node); } The other part, is a bit harder to explain. And in fact, i have not yet figured out the details of how to do this in PHP: so here is the Rails code :p ActionController::Routing::.... do |map| ... map.connect "blog/:year/:month/:day/:title" #in Ruby ":month/" is like the "$month/" in PHP :controller => "blog" :action => "show_date" #we call this callback, in drupal :requirements => {:year => /(19|20)\d\d/, :month => /[01]?\d/, etc ... an array with preg-stuff to filter out dates done now, RoRs smartness comes to play. and here is where i have n clue how to do this in drupal, yet. @link = url_for(:day => "27") will return http://.../blog/2005/12/27 (the rest, is just figured out by sensible magic" @link = url_for(:year => "2005") will return http://.../blog/2005/ nifteeey! You see, that its url_for function is a bit more complex then our url feature. It does not take strings, but arguments. Maybe that direction is the key to sucess here?
I don't see how we can save hooks, variables, memory and code. Can you provide an example in pseudo-code that clarifies the workflow of (i) generating a page with clean URLs and (ii) loading a page based on a clean URL?
(i) Nothing, null, Voidness. we dont do anything on page generation! We should not do anything wrt url stuff on page generation. (exept some smarter cache generation, but that is totally off topic) (ii) See above. The part where i have no clue yet :) [ Bèr Kessels | Drupal services www.webschuur.com ]