在运营您的网站时,如果提供会员或VIP服务,让用户清晰地了解自己的VIP状态、何时到期以及如何续费,对于提升用户体验和会员留存至关重要。安企CMS(AnQiCMS)凭借其灵活的模板引擎和强大的用户管理功能,让您可以在网站模板中轻松实现这些功能。
我们都知道,安企CMS内置了完善的用户组管理和VIP系统,这让我们可以很方便地设置不同等级的用户权限和付费内容。那么,如何在用户看到自己的VIP状态时,能够直观地了解这一切呢?这就要用到模板中的ExpireTime字段了。
了解 ExpireTime 字段
在安企CMS中,每个用户都有一个相关的ExpireTime字段,它记录了该用户VIP服务的到期时间。这个字段存储的是一个标准的时间戳(Unix时间戳),表示VIP服务到期的那一刻。
要在模板中获取这个信息,我们需要用到userDetail这个模板标签。它能够获取当前或指定用户的详细信息。通常,我们会这样来获取当前登录用户的ExpireTime:
{% userDetail userProfile with id=user.Id %}
{% set expireTime = userProfile.ExpireTime %}
这里,user.Id通常代表当前登录用户的ID,而userProfile则是一个包含了用户所有详细信息的对象。通过userProfile.ExpireTime,我们就拿到了这个关键的时间戳。
这个时间戳直接显示并不直观,所以我们需要把它转换成我们人类能看懂的日期格式。安企CMS提供了stampToDate这个强大的过滤器(或者说函数标签),可以将时间戳格式化成你想要的任何日期和时间格式。例如,我们想把它格式化为“2006年01月02日 15时04分”的样式,可以这样使用:
{% set formattedExpireTime = stampToDate(expireTime, "2006年01月02日 15时04分") %}
判断 VIP 状态的核心逻辑
现在我们有了用户的VIP到期时间expireTime,以及它的可读格式formattedExpireTime。接下来,我们需要获取当前的时间来与expireTime进行比较。安企CMS的模板中提供了now标签来获取当前时间。为了方便比较,我们通常也会把它转换成时间戳。
{% set current_timestamp_str = now "20060102150405" %}
{% set current_timestamp = current_timestamp_str|integer %}
这里我们利用now标签输出一个纯数字的日期时间字符串(例如”20231027103000”),然后通过integer过滤器将其转换为可比较的整数时间戳。
有了这两个时间戳,我们就可以在模板中使用if、elif(else if)和else逻辑判断标签,来根据VIP状态显示不同的内容了。
基本的判断逻辑可以分为三种情况:
- VIP 状态正常:
expireTime大于current_timestamp。 - VIP 即将过期:
expireTime大于current_timestamp,但又在某个预设的“即将过期”的时间范围内(比如7天内)。 - VIP 已过期:
expireTime小于或等于current_timestamp。
为了实现“即将过期”的判断,我们还需要计算一个“未来某个时间点”的时间戳。例如,如果想判断是否在7天内过期,我们可以计算当前时间戳加上7天对应的秒数(7 * 24 * 60 * 60)。
{% set seven_days_in_seconds = 7 * 24 * 3600 %}
{% set seven_days_later_timestamp = current_timestamp|add:seven_days_in_seconds %}
这里我们巧妙地利用了add过滤器来计算时间戳的加法。
在模板中实现不同状态的显示
现在,让我们把这些逻辑组合起来,看看如何在模板中为这三种状态设计不同的显示。
假设我们希望在用户个人中心页面显示这些信息,可以参考以下结构:
”`twig {# 假设 user.Id 代表当前登录用户的ID #} {% userDetail userProfile with id=user.Id %} {% set expireTime = userProfile.ExpireTime %} {# 用户的VIP到期时间戳 #}
{% set formattedExpireTime = stampToDate(expireTime, “2006年01月02日”) %} {# 格式化到期日期 #}
{% set current_time_str = now “20060102150405” %} {# 获取当前时间(格式化为纯数字字符串) #} {% set current_timestamp = current_time_str|integer %} {# 转换为整数时间戳 #}
{% set seven_days_in_seconds = 7 * 2