Я застрял в разработке расширения для Shopware. Я хочу правильно управлять администрированием категорий.Расширение бэкэнда в магазине с помощью ExtJs
Для создания этого плагина (устаревшего). Эти плагины добавляют первую вкладку в категорию.
//{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' of undefined. без .load() нет ошибки, но я также не могу определить, загружен ли магазин.
Сам магазин файл в Просмотров/бэкенд/haendlerbund_foobar_categories/магазин/foo_bar_products
и содержание файла:
//{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}
EDIT: Для дальнейшего контекста, это - текущее состояние модели.
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
]);
}
}
Он должен возвращать некоторые фиктивные данные сейчас.
Я не могу решить проблему. Поскольку любая документация, которую я смог найти, была либо сосредоточена на создании отдельного компонента изменения существующего поля. Я подозреваю, что я попал в неправильную область действия или имею ошибку с именами или что-то в этом роде.
Любая помощь очень ценится.
Я проверил ваше предложение. Это не имеет значения. Но вход, который, возможно, магазин не возвращает никаких данных, дал мне идею протестировать. –
Пожалуйста, сделайте 'console.log (me.fooBarProducts)' и проверьте, что вы получаете. – Alexander
Будет, когда я выясню, где поставить это, чтобы увидеть ответ. К настоящему моменту я пытаюсь проверить имена классов и так далее. Я предполагаю, что есть некоторые перепутанные вещи. ни магазин, ни модель не находятся в чистой среде ExtJS, и я на самом деле пытаюсь выяснить, получил ли я хотя бы правильный объем. –