Drupal 7およびubercartロールを使用しており、ロールの有効期限として1日を指定しています。そのロールを使用して、ユーザーは1つのノードを作成できます。新しいノードが作成されたらすぐに、作成されたロールの有効期限を削除する必要があります。
ルールを使用してロールを削除できますが、有効期限が設定されているため、ユーザーが同じロールを再度購入した場合、ロールに同じロールを再度割り当てることはできません。
Ubercartのロール期限切れを削除する方法はありますか?
助けてくれてありがとう.
drupal標準ルールを使用してロールを削除しているようです。互換性を高めるために独自のuc_ubercart関数を呼び出してみてください。
/**
* Deletes an expiration using user id or user id and rid.
*
* This function deletes expirations associated with users and roles. If
* no role ID is passed, the function deletes all role expirations associated
* with the given user. Otherwise, the function only deletes expirations whose
* user and role IDs match. If any roles were actually deleted, the function
* notifies the user. The menu cache is then flushed, as privileges to view
* menu items may have been lost in the process.
*
* @param $account
* A Drupal user object.
* @param $rid
* A Drupal role ID.
* @param $silent
* When set to TRUE will suppress any Drupal messages from this function.
*/
uc_roles_delete($account, $rid = NULL, $silent = FALSE) {}
カスタムモジュールの例(ルールなし):
https://api.drupal.org/api/drupal/modules!node!node.api.php/function/hook_node_insert/7
/**
* Implements hook_node_insert().
*/
function mymodule_node_insert($node) {
if ($node->type == 'customtype') {
$rid = 3; //@TODO: set rol ID
$account = user_load($node->uid);
// Delete UC Role!
uc_roles_delete($account, $rid, TRUE);
}
}
ルールアクションPHPでこのコードを使用することもできますが、フックの方が好きです。