You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 16:45:04