后台已创建并启用 Terms and Conditions,但结账 Place Order 前没有复选框。条款有 Store View 关联、应用模式和显示位置,前端还依赖 checkout config 与 Knockout 组件;一步结账扩展可能完全替换原组件。
先固定复现条件和影响范围
记录 agreement ID、是否 Active、Mode、关联 Store View 和结账主题。比较 Luma/默认结账与当前主题,检查页面配置数据和 Console 首条错误。
SELECT agreement_id,name,is_active,is_html,mode,checkbox_text,content_height
FROM checkout_agreement ORDER BY agreement_id;
SELECT agreement_id,store_id FROM checkout_agreement_store ORDER BY agreement_id,store_id;
php bin/magento config:show checkout/options/enable_agreements
grep -R --line-number 'checkout-agreements|agreements' app/design app/code 2>/dev/null
php bin/magento cache:clean config layout block_html full_page
根据证据分支定位
agreement 接口或 checkout config 没数据,查 Store 关联与作用域;数据存在但组件没渲染,查布局、模板和 JS 错误;默认主题正常而一步结账失败,按扩展提供的集成点处理。Mode 为自动时本来就可能不要求用户勾选。
修复时保留回滚路径
在正确 Store View 启用需要的协议并使用标准 agreements 组件或扩展的兼容实现。不要只在前端加一个没有服务端校验的复选框;需要强制同意时,提交订单接口必须验证对应 agreement ID。
上线验收
访客与登录客户、每个支付方式和 Store View 都测试。未勾选时订单提交被明确阻止,勾选后可下单,非目标 Store 不应出现错误协议。
生产环境操作前的检查
处理“Magento 2 结账页不显示条款复选框”前,先记录 Magento 版本、部署模式、问题 Store View、复现时间和最近一次发布。所有 SQL 默认先执行 SELECT;任何写操作、目录清理或配置切换都应确认影响范围、保留备份并准备回滚。多节点环境要核对各节点代码版本、app/etc/env.php 配置摘要与流量分布。
php bin/magento --version
php bin/magento deploy:mode:show
php bin/magento maintenance:status
php bin/magento indexer:status
php bin/magento cache:status
命令应由 Magento 文件所有者在项目根目录执行。不要在生产高峰同时运行全量索引、静态部署和数据修复;涉及客户、支付、税费或订单的改动,先在脱敏数据副本验证。
建立可比较的排查记录
每次实验只改变一个变量,记录操作前值、命令、开始与结束时间、结果和回滚方式。准备一个正常对象与一个异常对象对照;若旧对象恢复而新对象仍能复现,说明根因尚未消除。
| 检查层 | 需要保存的证据 | 通过标准 |
|---|---|---|
| 入口层 | URL、状态码、请求 ID、节点 | 路由和协议一致 |
| 应用层 | 异常堆栈、模块、作用域 | 无新异常且可重复 |
| 数据层 | 主键、时间、关联行数 | 关系完整且无重复副作用 |
| 业务层 | 正常、失败、重试路径 | 最终结果一致 |
修复后的观察窗口
上线后至少观察一轮 Cron、队列和索引周期,并在两台节点、无痕浏览器和目标 Store View 重复验证。临时调试日志必须脱敏,确认错误率、响应时间和数据量稳定后及时关闭。

