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 url_alias. 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@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 Jefferson