使用ExtJs增强Shopware后端类别
我一直在为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
//{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环境中,我实际上试图弄清楚我是否至少得到了正确的范围。