Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ExtJs增强Shopware后端类别_Extjs_Models_Shopware - Fatal编程技术网

使用ExtJs增强Shopware后端类别

使用ExtJs增强Shopware后端类别,extjs,models,shopware,Extjs,Models,Shopware,我一直在为Shopware开发扩展。 我想以正确的方式扩展类别管理 为了实现这一点,我们创建了插件(遗留)。此插件在类别中附加第一个选项卡 //{block name="backend/category/view/tabs/settings" append} 这样做是为了添加带有下拉列表的字段集。该文件如下所示: //{block name="backend/category/view/tabs/settings" append} Ext.define('Shopware.apps.Haend

我一直在为Shopware开发扩展。 我想以正确的方式扩展类别管理

为了实现这一点,我们创建了插件(遗留)。此插件在类别中附加第一个选项卡

//{block name="backend/category/view/tabs/settings" append}
这样做是为了添加带有下拉列表的字段集。该文件如下所示:

//{block name="backend/category/view/tabs/settings" append}
Ext.define('Shopware.apps.HaendlerbundFoobarCategories.view.category.tabs.settings', {
    override:'Shopware.apps.Category.view.category.tabs.Settings',

    getItems: function() {
        var me = this;
        var items = me.callParent(arguments);
        me.FooBar = me.getFooBarSection();
        items.push(me.FooBar);
        return items;
    },

    getFooBarSection : function()
    {
        var me = this;
        return Ext.create('Ext.form.FieldSet',{
            title: 'FooBar Verlinkung',
            anchor: '100%',
            defaults : me.defaults,
            disabled : false,
            items : me.getDropdowns()
        });
    },

    getDropdowns:function(){
        var me = this;

        return me.templateComboBox = Ext.create('Ext.form.field.ComboBox', {
            xtype:'combobox',
            fieldLabel: 'FooBar Product',
            store: me.fooBarProducts.load(),
            labelWidth: 155,
            valueField: 'id',
            displayField:'title',
            editable: true,
            allowBlank:true,
            name:'fbproduct'
        });
    }
});
//{/block}
我怀疑的主要问题是商店。就这样,我得到了一个JS 错误无法读取未定义的属性“load”。如果没有.load(),则不会出现错误,但我也无法确定存储是否已加载

商店文件本身位于视图/backend/haenderbund\u foobar\u类别/store/foobar\u产品中

文件的内容是:

//{block name="backend/haendlerbund_foobar_categories/store/fooBarProducts"}
Ext.define('Shopware.apps.HaendlerbundFoobarCategories.store.fooBarProducts', {

//...
model: 'Shopware.apps.HaendlerbundFoobarCategories.model.fooBarProducts',
proxy : {
        type : 'ajax',
         /**
         * Configure the url mapping for the different
         * store operations based on
         * @object
         */
        api : {
            read : '{url controller=HaendlerbundFoobarCategories action=getProducts}'
        },
        /**
         * Configure the data reader
         * @object
         */
        reader : {
            type : 'json',
            root: 'data'
        }
    }
});
//{/block}
编辑: 对于进一步的上下文,这是存储引用的模型的当前状态

Ext.define('Shopware.apps.HaendlerbundFoobarCategories.model.fooBarProducts', {
    extend: 'Ext.data.Model',

    /**
     * If the name of the field is 'id' extjs assumes automatically that
     * this field is an unique identifier.
     * @integer
     */
    idProperty : 'id',

    fields:[
        { name : 'id',          type: 'int' },
        { name : 'ffid',        type: 'bigint' },
        { name : 'title',       type: 'string' },
        { name : 'description', type: 'string' },
        { name : 'price',       type: 'decimal' },
        { name : 'vat',         type: 'decimal' },
        { name : 'image',       type: 'text' },
        { name : 'active',      type: 'boolean' },
        { name : 'createdAt',   type: 'datetime' },
        { name : 'modfiedAt',   type: 'datetime' }
    ],


    /*associations: [
        {
            relation: 'OneToMany',
            storeClass: 'Shopware.apps.HaendlerbundFoobarCategories.store.fooBarProducts',
            loadOnDemand: true,

            type: 'hasMany',
            model: 'Shopware.apps.HaendlerbundFooBarCategories.model.fooBarProducts',
            name: 'getCategories',
            associationKey: 'categories'
        },
    ]*/
});
存储引用的php控制器也包含以下内容:

<?php

class Shopware_Controllers_Backend_HaendlerbundFoobarCategories extends Shopware_Controllers_Backend_Application
{
    protected $model = 'Shopware\CustomModels\Product\FFProduct';
    protected $alias = 'ffproducts';

    protected function getListQuery()
    {
        $builder = parent::getListQuery();
        return $builder;
    }

    protected function getDetailQuery($id)
    {
        $builder = parent::getDetailQuery($id);
        return $builder;
    }

    protected function getAdditionalDetailData(array $data)
    {
        return $data;
    }

    public function getProducts(){
        $builder = $this->getManager()->createQueryBuilder();
        $builder->select('*')
                ->from($model, $alias);

        $data['id']     = 1;
        $data['ffid']   = 1;
        $data['title']  = 'lorem ipsum'; 

        $this->view()->assign([
            'success'   => true,
            'data'      => $data,
            'total'     => 1

        ]);

    }
}
如果您使用

store: somestore.load()
组合框将绑定到
load
返回的值。load函数不返回任何内容,因此组合的存储配置设置为
undefined

你想做的可能是

    me.fooBarProducts.load();
    return me.templateComboBox = Ext.create('Ext.form.field.ComboBox', {
        xtype:'combobox',
        fieldLabel: 'FooBar Product',
        store: me.fooBarProducts,
        labelWidth: 155,
        valueField: 'id',
        displayField:'title',
        editable: true,
        allowBlank:true,
        name:'fbproduct'
    });
如果你使用

store: somestore.load()
组合框将绑定到
load
返回的值。load函数不返回任何内容,因此组合的存储配置设置为
undefined

你想做的可能是

    me.fooBarProducts.load();
    return me.templateComboBox = Ext.create('Ext.form.field.ComboBox', {
        xtype:'combobox',
        fieldLabel: 'FooBar Product',
        store: me.fooBarProducts,
        labelWidth: 155,
        valueField: 'id',
        displayField:'title',
        editable: true,
        allowBlank:true,
        name:'fbproduct'
    });

您的问题是将存储分配给combobox

这行代码不正确:

store:me.fooBarProducts.load(),

通常,存储只应连接到如下组合框:

//{block name="backend/category/view/tabs/settings" append}
Ext.define('Shopware.apps.HaendlerbundFoobarCategories.view.category.tabs.settings', {
    override:'Shopware.apps.Category.view.category.tabs.Settings',

    getItems: function() {
        var me = this;
        var items = me.callParent(arguments);
        me.FooBar = me.getFooBarSection();
        items.push(me.FooBar);
        return items;
    },

    getFooBarSection : function()
    {
        var me = this;
        return Ext.create('Ext.form.FieldSet',{
            title: 'FooBar Verlinkung',
            anchor: '100%',
            defaults : me.defaults,
            disabled : false,
            items : me.getDropdowns()
        });
    },

    getDropdowns:function(){
        var me = this;

        return me.templateComboBox = Ext.create('Ext.form.field.ComboBox', {
            xtype:'combobox',
            fieldLabel: 'FooBar Product',
            store: me.fooBarProducts.load(),
            labelWidth: 155,
            valueField: 'id',
            displayField:'title',
            editable: true,
            allowBlank:true,
            name:'fbproduct'
        });
    }
});
//{/block}
商店:'fooBarProducts'

这里有一把小提琴给你看:

请看这里:

对于组合框示例 在这里存储声明:


要加载您的存储,您应该调用存储从组合声明中加载

您的问题是存储分配给组合框

这行代码不正确:

store:me.fooBarProducts.load(),

通常,存储只应连接到如下组合框:

//{block name="backend/category/view/tabs/settings" append}
Ext.define('Shopware.apps.HaendlerbundFoobarCategories.view.category.tabs.settings', {
    override:'Shopware.apps.Category.view.category.tabs.Settings',

    getItems: function() {
        var me = this;
        var items = me.callParent(arguments);
        me.FooBar = me.getFooBarSection();
        items.push(me.FooBar);
        return items;
    },

    getFooBarSection : function()
    {
        var me = this;
        return Ext.create('Ext.form.FieldSet',{
            title: 'FooBar Verlinkung',
            anchor: '100%',
            defaults : me.defaults,
            disabled : false,
            items : me.getDropdowns()
        });
    },

    getDropdowns:function(){
        var me = this;

        return me.templateComboBox = Ext.create('Ext.form.field.ComboBox', {
            xtype:'combobox',
            fieldLabel: 'FooBar Product',
            store: me.fooBarProducts.load(),
            labelWidth: 155,
            valueField: 'id',
            displayField:'title',
            editable: true,
            allowBlank:true,
            name:'fbproduct'
        });
    }
});
//{/block}
商店:'fooBarProducts'

这里有一把小提琴给你看:

请看这里:

对于组合框示例 在这里存储声明:


要加载您的店铺,您应该调用组合声明中的店铺加载

谢谢您的回答。这有助于理解行为。我几乎没有使用ExtJs的经验。我将尝试将您的答案与@Alexander的答案结合起来谢谢您的回答。这有助于理解行为。我几乎没有使用ExtJs的经验。我将尝试将您的答案与@AlexanderI测试您的建议结合起来。这没有什么区别。但是,可能商店不返回任何数据的输入给了我一个测试的想法。请执行
console.log(me.fooBarProducts)
并检查您得到了什么。当我找到将此放置在何处以实际查看响应时,我会这样做。现在我尝试测试类的命名等等。我猜也有一些混淆的东西。商店和模型都不在纯ExtJS环境中,我实际上试图弄清楚我是否至少得到了正确的范围。这没有什么区别。但是,可能商店不返回任何数据的输入给了我一个测试的想法。请执行
console.log(me.fooBarProducts)
并检查您得到了什么。当我找到将此放置在何处以实际查看响应时,我会这样做。现在我尝试测试类的命名等等。我猜也有一些混淆的东西。商店和模型都不在纯ExtJS环境中,我实际上试图弄清楚我是否至少得到了正确的范围。