题
一个用户仅是一个节点的所有者,我想在登录时间将用户重定向到他唯一拥有的节点。
如果我只知道登录的用户,我该如何获取节点内容?
解决方案
这就是我这样做的方式:
function MYHOOK_user_login(&$edit, $account) {
global $user;
$nid = db_query('SELECT nid FROM {node} WHERE uid = :uid', array(':uid' => $user->uid))->fetchField();
drupal_goto('node/' . $nid);
}
其他提示
看一眼 hook_user_login -> http://api.drupal.org/api/drupal/modules--user-user.api.php/function/hook_user_login/7. 。在这里,您可以添加自己的自定义代码来执行诸如通过用户ID(UID)查找节点ID(NID)的事情,然后发布 drupal_goto (http://api.drupal.org/api/drupal/includes-common.inc/function/drupal_goto/7)
还可以选择使用 hook_form_alter 到登录形式,可能被认为是D6解决方案。如果这些建议没有解决您的问题,则必须提供更多详细信息。
$nid = db_query('SELECT nid FROM {node} WHERE uid = :uid AND type = :type', array(':uid' => $user->uid, ':type' => $node_type))->fetchField():
这将为您带来NID。
注意:请忽略此答案(有关原因,请参见评论)。
$nid = db_select('node', 'n')
->fields('n', array('nid'))
->condition('n.uid', $user->uid)
->range(0, 1)
->fetchField()
我很想这样做,因为这是“ Drupal”的方式,尽管其他建议肯定是有效的。请注意,为了安全起见,我已经对SQL声明提出了限制。
不隶属于 drupal.stackexchange