Shopware 6评论插件:兼容旧版添加自动发布星级阈值方案
Shopware 6评论插件向后兼容实现方案
核心兼容原则
确保原有reviewSkipModeration配置的用户功能完全不变,新配置autoPublishStars仅在原有功能关闭时生效,且默认不影响任何用户的现有行为。
1. 配置层兼容(config.xml)
在配置界面中明确逻辑优先级,避免用户混淆,同时设置合理默认值:
<card> <title>评论自动发布设置</title> <!-- 原有配置项 --> <component name="sw-checkbox-field"> <name>reviewSkipModeration</name> <label>自动发布所有评论</label> <helpText>启用后,所有提交的评论直接发布,无需审核</helpText> <default>false</default> </component> <!-- 新增配置项 --> <component name="sw-number-field"> <name>autoPublishStars</name> <label>自动发布星级阈值</label> <helpText>仅当「自动发布所有评论」关闭时生效:自动发布达到/超过该星级的评论(1-5星)</helpText> <default>0</default> <min>0</min> <max>5</max> <!-- 原有功能启用时,禁用新配置输入框 --> <disabled>{% if config.reviewSkipModeration %}true{% else %}false{% endif %}</disabled> </component> </card>
2. 插件更新时的配置迁移(Plugin.php)
在update方法中处理已有用户的配置兼容,避免手动修改:
public function update(UpdateContext $context): void { parent::update($context); $configService = $this->container->get(Config::class); $currentConfig = $configService->get(''); // 对已开启「自动发布所有评论」的用户,默认将星级阈值设为1(确保所有评论仍自动发布) if ($currentConfig['reviewSkipModeration'] ?? false) { if (!isset($currentConfig['autoPublishStars']) || $currentConfig['autoPublishStars'] === 0) { $configService->set('autoPublishStars', 1); } } else { // 未开启全量自动发布的用户,默认阈值设为0(保持原有需审核的逻辑) if (!isset($currentConfig['autoPublishStars'])) { $configService->set('autoPublishStars', 0); } } }
3. 业务逻辑层兼容(评论处理服务)
在评论提交/状态处理的代码中,优先执行原有逻辑,再触发新逻辑:
// 示例:评论状态设置逻辑 $reviewSkipModeration = $this->config->get('reviewSkipModeration'); $autoPublishStars = $this->config->get('autoPublishStars'); // 优先保留原有逻辑:开启全量自动发布时直接发布所有评论 if ($reviewSkipModeration) { $comment->setIsActive(true); } else { // 新逻辑:仅当星级达标且阈值>0时自动发布 if ($autoPublishStars > 0 && $comment->getRating() >= $autoPublishStars) { $comment->setIsActive(true); } else { // 保持待审核状态 $comment->setIsActive(false); } }
内容的提问来源于stack exchange,提问作者mlodhi
相关产品推荐
相关产品推荐

