web-dev-qa-db-ja.com

ユーザーのログイン後にphpコードを実行する

トリガーページがバージョン6から変更されているのがわかります。かなり奇妙です。ユーザーがログインしてphpコードを実行すると見つかりません...

私がしなければならないことはまさにそれです..彼の場所(イントラネットまたはインターネット)に応じていくつかのユーザーの役割を制御します私はすでにphpコードを開発していますが、それを配置する方法が見つかりません...

$usr = user_load($uid);

$array_roles=array();
//supose i'm logging in from internet
    $details = array(
        'uid' => $uid,
        'roles' => array(
            21 => 'Internet' 
            )
        );

foreach($usr->roles as $key=>$value) 
{

 if ($key!=20 and $key!=21) // exclude internet or intranet roles
 {

  $details['roles'][$key]=$value;
 }
}

user_save($usr, $details);
2
PartySoft

ユーザーがログインした後にカスタムコードを実行する最良の方法は、自分で作成した小さなカスタムモジュールに hook_user_login を実装することです。書き込んだphpを関数にして、それを呼び出します。

つまり.

function module_name_user_login(&$edit, $account) {
  module_name_user_function($account->uid);
}

function module_name_user_function($uid) {
$usr = user_load($uid);

$array_roles=array();
//supose i'm logging in from internet
$details = array(
    'uid' => $uid,
    'roles' => array(
        21 => 'Internet' 
        )
    );
foreach($usr->roles as $key=>$value) {
  if ($key!=20 and $key!=21) {
  $details['roles'][$key]=$value;
  }
}
user_save($usr, $details);
}

カスタムモジュールの詳細、およびすべてのモジュールについては、 The Module Developer's Guide を参照してください。

トリガーとアクションにカスタムphpを配置することはお勧めしません。 データベースにカスタムコードを保持することは、将来サイトを維持する必要のある人がダウンしてくる人にとって常に危険です

2
LSU_JBob

必要なのは Rules モジュールです-これとまったく同じことができます。新しいルールを作成し、条件として「ユーザーログイン」を選択して、「カスタムPHPを実行する」という新しいアクションを追加するだけです。

1
BenjaminRH