欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Drupal Commerce - 通过Rule控制续费到期用户。里面有rules的实例 可以创建rules 规则 有大用

shiping1 的头像

里面有rules的实例 可以创建rules 有大用

Drupal Commerce - 通过Rule控制续费到期用户。

Drupal Commerce 可以很方便的设置订阅性质的付费网站,可以通过Commerce subscription products 模块,在用户的数据里面增加一个过期日期,而Commerce subscription products只是增加了过期日期,却没发现有判断是否角色已经到期,所以要判断用户是否到期了,我们得自己写一些代码跟配置来实现,首先我们会想到的是两种方法,
  1. 一种是通过cron 去每日定期访问某页,然后循环读取每个用户的过期日期,如果现在的日期过期日期大的话,删除用户(或者是去掉此用户某个角色如角色Premium User);
  2. 第二种方法是通过在用户登录时候,做一个判断,是否现在的日期过期日期大,如果是的话去掉此用户某个角色如角色Premium User

此文是基于第二种方法的,因为第二种方法相对比较简单,那么该怎么做呢,我们的用rules模块做辅助,

首先我们通过hook_rules_condition_info() 这个hook 去增加一个能用于rules里面的条件

1
2
3
4
5
6
7
8
9
10
11
/**
 * Implementation of hook_rules_condition_info().
 */
function thinkinpremium_rules_condition_info() {
  return array(
    'thinkinpremium_condition_sp_validity' => array(
      'label' => t('Subscription validity'),
      'base' => 'thinkinpremium_condition_sp_validity',
    ),
  );
}

然后再写一个与它对应的函数,此函数是在数据库中读取当前用户的过期日期,并且与当前日期做比较,如果当前日期大于过期日期,返回true,否则返回false:

1
2
3
4
5
6
7
8
9
10
function thinkinpremium_condition_sp_validity(){
    global $user;
    $query=db_select('field_data_field_commerce_sp_validity','v')->fields('v',array('field_commerce_sp_validity_value'))->execute()->fetchAssoc();
    //判断当前日期是否大于有效期日期,如果大于,表示过期了。
    if(time() > $query['field_commerce_sp_validity_value']){
        return true;
    }else{
        return false;
    }
}

好了,我们清空缓存,然后打开rules页面(admin/config/workflow/rules),我们新建一个rule叫Subscription validity,事件选择User has logged in,意思是当用户登录时候,然后在Conditions条件中,把我们刚刚代码实现的那个条件找出来并且选择它,确定,上面代码,我们定义了这个条件的名字也是叫Subscription validity,你可以很方便的找到它的。

最后是增加一个action(动作),这个动作,是移除当前一个角色,我们选Remove user role,然后值是Premium User。保存,最终的rule如图:

好了我们新建一个用户测试一下,我们新建用户 “猪跑啦”,并且在用户资料中设置过期时间 2014-12-24(当前日期为2012-12-24),并且赋予它角色:Premium User

第一次我们尝试直接登录,登录成功后,看看用户“猪跑啦”角色依然是有:Premium User。

第二次我们不直接登录,我们先用管理员,把它的用户过期时间改为 2012-12-11(当前日期为2012-12-24),角色依然有:Premium User,我们推出管理员账号后,再次用“猪跑啦”登录,如果没错的话,因为条件满足了当前日期大于过期日期,所以会触发事件:把这个用户所拥有的角色Premium User删除,所以登录成功后,猪跑啦将不再是Premium User,是不是这样呢?我们很简单的做一个验证就知道了,管理员查看一下猪跑啦用户,确实是不见了Premium User角色。

怎么样呢,rules是不是很简单?在两次登录中,系统做出了两次不同的动作。

当然,还可以有更多的尝试,这些就留给读者慢慢摸索了。

 

来自 http://www.drupalla.com/node/1888
普通分类: