2

我有一个 drupal 页面(内容类型页面),它应该使用干净的 url 接受 GET 值。

我使用php代码输入格式将以下代码放入页面正文中。

<?php
  $uid = $_GET['uid'];
  $user = user_load($uid);
  print $user->name;
?>

现在,以下链接http://www.example.com/mypath/?uid=5会显示用户 5 的名称。伟大的。

我的问题是:这可以使用干净的 url 来完成,这样访问 http://www.example.com/mypath/5会得到相同的结果吗?(类似于在视图中使用参数)

4

3 回答 3

2

您可以使用模块在菜单系统中执行您所要求的操作hook_menu,但您不能创建其中一部分是名称的别名。整个别名是一个名称,因此您无法从中提取信息。使用hook_menu你可以这样做:

function my_module_menu() {
  $items = array();

  $items['path/%user'] = array(
    'title' => 'Title',
    'page callback' => 'callback',
    'page arguments' => array(1),
    'access callback' => '...',
    'access arguments' => array(...),
  );

  return $items;
}

然后在您的回调函数中,您将在对应于 uid 的路径中拥有值或参数 1(实际上它将是一个加载的用户对象,因为%user)。

于 2010-04-14T18:25:14.037 回答
2

是的。使用 arg() 而不是 $_GET

请记住,arg() 默认使用 $_GET['q'],因此在返回结果之前有效地转换了别名。因此,您尝试访问的参数可能位于另一个位置。

例如,路径 myalias/5 可能会转换为 taxonomy/term/5。在这种情况下,arg(2) 为 5。

有关 Drupal arg() 函数的更多信息,请参阅http://api.drupal.org/api/function/arg/6

于 2010-04-15T04:28:29.227 回答
0

如果您使用视图来组装这些页面,则可以通过将 UID 作为 URL 中提供的参数轻松完成该部分。

于 2010-04-14T19:22:27.200 回答