Shopware 6.7支付插件开发:如何获取仅含订单状态的选择框
实现仅显示订单状态的选择框
1. 通过插件配置文件直接过滤状态
在插件的src/Resources/config/admin.xml里,给状态选择字段添加过滤规则,只拉取订单状态机下的状态:
<component name="sw-entity-single-select"> <name>orderStateId</name> <label>订单状态</label> <entity>state_machine_state</entity> <criteria> <filter> <property>stateMachine.technicalName</property> <operator>=</operator> <value>order</value> </filter> </criteria> </component>
2. 用Vue组件手动处理(可选)
如果需要更灵活的控制,在后台设置的Vue组件里手动加载过滤后的状态:
先编写组件逻辑(示例路径:src/Resources/app/administration/src/component/sw-settings-my-payment/index.js):
import template from './sw-settings-my-payment.html.twig'; Shopware.Component.register('sw-settings-my-payment', { template, data() { return { orderStates: [], selectedOrderStateId: null }; }, created() { this.loadOrderStates(); }, methods: { async loadOrderStates() { const criteria = new Shopware.Data.Criteria(); // 仅筛选订单状态机对应的状态 criteria.addFilter( Shopware.Data.Criteria.equals('stateMachine.technicalName', 'order') ); const stateRepo = this.repositoryFactory.create('state_machine_state'); const result = await stateRepo.search(criteria, Shopware.Context.api); this.orderStates = result.map(state => ({ label: state.translated.name, value: state.id })); } } });
对应的Twig模板(sw-settings-my-payment.html.twig)添加选择框:
<sw-single-select v-model="selectedOrderStateId" :options="orderStates" label="订单状态" placeholder="请选择订单状态" ></sw-single-select>
3. 注册配置字段以便保存
最后在src/Resources/config/config.xml里把这个字段注册到插件配置中,确保能正常保存和读取:
<card> <title>订单状态设置</title> <elements> <element> <type>single_select</type> <name>orderStateId</name> <label>订单状态</label> <entity>state_machine_state</entity> <criteria> <filter> <property>stateMachine.technicalName</property> <operator>=</operator> <value>order</value> </filter> </criteria> </element> </elements> </card>
核心逻辑是通过stateMachine.technicalName = 'order'这个条件过滤——Shopware中不同类型的状态归属不同的状态机,订单状态全部归在order状态机下,这样就能排除支付、物流等其他系统状态。
内容的提问来源于stack exchange,提问作者shylosa
相关产品推荐
相关产品推荐

