Drupal China
Drupal 同时带给用户进行批量指定 URL 别名的可能性。 你可能愿意看到 Drupal 使用完全不一样的 URL,或者是将 URL 翻译为访问者的本地语言,不论是哪种情形,这个特性都是相当棒的。 只有可以访问站点源代码的管理员才能设置这种类型的别名,你可以在代码的某处定义一个函数 (甚至在 settings.php),请看下面的示范:
<?php
// 用于 Drupal 4.6.x 的示范
function conf_url_rewrite($path, $mode = 'incoming') {
if ($mode == 'incoming') { // 来自客户端的 URL
return preg_replace('!^display/(\d+)$!', 'node/\1', $path);
}
elseif ($mode == 'outgoing') { // 输出到客户端的 URL
return preg_replace('!^node/(\d+)$!', 'display/\1', $path);
}
}
?><?php
// 适用于 Drupal 4.7.x 以上的示范
function custom_url_rewrite($type, $path, $original) {
// 如果这个路径已经有别名了,跳过它
if ($path != $original) {
return $path;
}
if ($type == 'source') { // 来自客户端的 URL
return preg_replace('!^display/(\d+)$!', 'node/\1', $path);
}
elseif ($type == 'alias') { // 输出到客户端的 URL
return preg_replace('!^node/(\d+)$!', 'display/\1', $path);
}
}
?>这个函数将每个 node/$node_id 类型的 URL 转为 display/$node_id。 你自己定制的 URL 别名将不受影响,因此,如果你有一个 'contact' 页面别名,那么 display/3 别名将不会生效。
利用这个特性,你不仅仅可以用来缩短你的 URL,或者将他们翻译为你自己的语言,你还可以添加全新的次级 URL 到已经存在的模块的 URL 空间,或者将存在的组合到公共的 URL 空间。举个例子,你可以为“新闻”词汇下的页面别名建立一个 news 部分,这样就可以拥有 news/15 和 news/sections/3 这样的 URL 而不是 node/15 和 taxonomy/term/3。 当然要做如此高级的别名,你需要广泛地了解 Drupal 的内部工作机理和正则表达式。
最新评论
2010-03-16 12:16:55
2010-03-16 12:16:17
2010-03-16 12:16:32
2010-03-16 01:16:54
2010-03-15 22:15:12
2010-03-15 22:15:17
2010-03-15 12:15:00
2010-03-15 11:15:35
2010-03-15 09:15:29
2010-03-15 18:15:42