如何在Shopware App Script中获取应用配置与客户生日数据?
Shopware App Script 获取客户生日、应用配置及拦截订单流程实现
1. 获取客户出生日期
- 登录客户的生日信息可从购物车关联的客户实体中直接获取,通过
services.cart.customer.birthday即可访问。 - 注意:未登录的访客用户没有生日数据,需先判断客户是否存在,避免空值报错。
示例代码:
{# @var services \Shopware\Core\Framework\Script\ServiceStubs #} {% set customer = services.cart.customer %} {% set birthday = customer ? customer.birthday : null %} {# 可选:将生日格式化为字符串 #} {% if birthday %} {% set formattedBirthday = birthday|date('Y-m-d') %} {% endif %}
2. 获取应用配置变量
- Shopware App的自定义配置项可通过
services.app.config直接读取,前提是你已在App的manifest.xml中定义了对应字段。 - 假设你在配置中定义了一个名为
min_purchase_age的限制年龄项,获取方式如下:
示例代码:
{# 获取应用配置中的指定变量 #} {% set minAge = services.app.config.min_purchase_age %}
- 补充:
manifest.xml中配置项的定义示例:
<config> <field type="int" name="min_purchase_age" label="最低购买年龄" helpText="设置允许下单的最低年龄阈值"/> </config>
3. 拦截订单完成流程
- 选择合适的脚本钩子:推荐使用
checkout.cart.validate(结账前验证)或checkout.order.before(订单创建前)事件,这两个钩子可直接阻止订单完成。 - 通过
services.cart.addError()添加错误提示,前端会显示该错误并中断结账流程。 - 结合生日与配置变量的完整拦截示例:
{# @var services \Shopware\Core\Framework\Script\ServiceStubs #} {% set items = services.cart.items %} {% set customer = services.cart.customer %} {% set minAge = services.app.config.min_purchase_age %} {# 仅对登录客户执行年龄验证 #} {% if customer and customer.birthday %} {% set today = 'now'|date('Y-m-d') %} {% set age = today|date('Y') - customer.birthday|date('Y') %} {# 修正生日未过当年的年龄计算 #} {% if today < customer.birthday|date('m-d') %} {% set age = age - 1 %} {% endif %} {# 满足拦截条件时阻止订单 #} {% if age < minAge %} {{ services.cart.addError('您的年龄未达到最低购买要求,无法完成订单') }} {% endif %} {% endif %}
注意事项
- 需在App的
script.xml中绑定对应钩子,示例:
<scripts> <script name="age-restriction-check" hook="checkout.cart.validate"> <content> {# 上述Twig脚本代码 #} </content> </script> </scripts>
- 若业务要求强制验证生日,可添加逻辑引导访客用户登录后再结账。
内容的提问来源于stack exchange,提问作者Marc Cheng
相关产品推荐
相关产品推荐

