我们的成员列表中有某些用户附加了角色“供应商”。所有此类成员在登录时都将被重定向到某个页面。如何实现?
9 回答
给这只猫剥皮的方法不止一种……这是我首选的 Drupal 7 方法:
function hook_user_login(&$edit, $account) {
$edit['redirect'] = 'node/123';
}
对于 Drupal 7
操作 --> admin/config/system/actions - 重定向到 URL
然后启用您的触发模块
触发器 --> /admin/structure/trigger/node
如果您尝试登录重定向,请按照此操作(在页面中选择用户选项卡)
转到 -->管理员/结构/触发器/用户
然后 触发:用户登录后
选择一个操作 -->重定向到 URL并分配。
然后清除缓存。
它会为你工作!
您可以在 Drupal 中定义操作和触发器:
Action( admin/settings/actions ) -重定向到特定页面
触发器 ( admin/build/trigger/user ) -用户登录后
试试这个。
编辑(见评论):
创建一个小模块来检查用户的登录过程他拥有什么角色,然后在必要时重定向。 drupal_goto => drupal 中的重定向功能
hook_user => 触发用户操作
对于用户的角色:
GLOBAL $user;
$roles = $user->roles;
$vendor = in_array('vendor', $roles);
$vendor 然后持有一个真/假值将决定是否重定向。
如果您不知道如何执行此操作,请在此处发布,我会为您编写模块。但这可能是为您编写未来的德鲁巴模块的好习惯。:)
DRUPAL 7 中有 2 种方式
1)使用动作和触发器看到这个http://drupal.org/node/298506
2)如果使用自定义模块
function YOURMODULE_user_login(&$edit, $account) {
if (!isset($_POST['form_id']) || $_POST['form_id'] != 'user_pass_reset' || variable_get('login_destination_immediate_redirect', FALSE)) {
if(in_array('THE-ROLE-WANTED-TO-REDIRECT',$account->roles)):
drupal_goto('PATH');
else: drupal_goto('user/'.$account->uid);
endif;
}
}
您可以使用规则
事件:用户已登录。
条件:用户具有角色
操作:页面重定向
有执行此操作的模块(除了 Trigger+Actions),例如 LoginDestination:http ://drupal.org/project/login_destination 。这个Drupal 论坛帖子也有更多关于它的信息。
hook_user 的以下条件
if($op =='login') drupal_goto("your path");
首先在表单预处理中设置条件(例如,我只想重定向在节点页面使用表单登录的用户)
function YOURMODULE_form_user_login_alter(&$form, &$form_state, $form_id)
{
$pathArguments = explode('/', current_path());
if (count($pathArguments) == 2 && $pathArguments[0] === 'node' && is_numeric($pathArguments[1])) {
$form_state['nodepath'] = current_path();
}
}
比定义重定向:
function YOURMODULE_user_login(&$edit, $account)
{
if (isset($edit['nodepath']) && !empty($edit['nodepath'])) {
drupal_goto($edit['nodepath']);
}
}