[development] strange inconsistency: 'custom_url_rewrite'

Larry Garfield larry at garfieldtech.com
Tue Dec 27 19:35:47 UTC 2005

On Tuesday 27 December 2005 10:10 am, Gabor Hojtsy wrote:
> > The performance concern is real, though, given the number of links a
> > typical page has.  Some fast, well-cached module-based rewrite mechanism
> > is needed, I agree.  Perhaps just prefix-based?  I've been trying to
> > avoid proposing anything at this point, though, as any changes now would
> > just slow down the release of 4.7. :-)
> Speaking of users, these are quite easy to do these in regexps. This is
> an edited excerpt from the weblabor.hu aliasing code (generates
> Hungarian URLs):
> $userautoalias = array(
>   ''                       => '',
>   '/edit'                  => '/szerkesztes',
>   '/track'                 => '/kovetes',
>   '/track/navigation'      => '/kovetes/navigacio',
>   '/contact'               => '/kapcsolat',
> );
> if (preg_match("!^user/(\\d+)(.*)$!", $path, $match)) {
>   if (isset($userautoalias[$match[2]])) {
>     return 'tagok/' . $match[1] . $userautoalias[$match[2]];
>   }
> }
> This is all it takes to convert user/1234/track to tagok/1234/kovetes.
> User names can be similarly done, given that you either query the
> database for the name, or have it cached somewhere.
> Goba

Hm.  I hadn't thought of internationalization.  I was thinking something like 
where the user module could map URL prefixes, that way all user-extending 
modules would work as well without having to be individually changed.  Eg, 
for incoming URLs the user module would grab /user/ as a prefix, read the 
second parameter, and if it's a string translate it to the corresponding int 
via a single db hit (SELECT uid FROM users WHERE username='%s').  Then all 
other modules just see the numeric version, just as they do now with 

On outgoing, l() would again check for any prefix and translate the other way.  
Add caching or flavor where necessary.

The same mechanism would allow for a node to also have /nodetype/label 
or /nodetype/class/label URLs, and all actions (view, edit, etc.) would still 
work properly because by the time other modules see it, it's already been 
translated back down to /node/id# as now.

I suppose that could still work with internationalization if you just throw 
some t() calls into it.

<waits for someone to tell him why that is dumb>

Larry Garfield			AIM: LOLG42
larry at garfieldtech.com		ICQ: 6817012

"If nature has made any one thing less susceptible than all others of 
exclusive property, it is the action of the thinking power called an idea, 
which an individual may exclusively possess as long as he keeps it to 
himself; but the moment it is divulged, it forces itself into the possession 
of every one, and the receiver cannot dispossess himself of it."  -- Thomas 

More information about the development mailing list