Moin zusammen,
ich bin mit meinem Latein und meinen Quellen ziemlich am Ende. Vielleicht habe ich etwas übersehen, aber wer mir da weiterhelfen kann (und sei es nur ein Link) wäre eine extrem wertvolle Hifle!
Ich möchte im Backend unter „Customers/Kunden“ bei „Orders/Bestellungen“ mit einem Plugin einen Filter hinzufügen, der auf das Feld „attribute5“ in „s_order_attributes“ filtert.
Die Oberfläche ist schon angepasst und die Suchparameter werden ans Backend übertragen. Das war einfach.
Jetzt ist aber das Problem, dass im Datenmodell „order“ das für die Liste geladen wird, die Tabelle „s_order_attributes“ nicht mitgeladen wird. Ich versuche das bisher erfolglos zu erweitern. Dafür habe ich mich an SwagExtendBackend orientiert.
Im Moment sieht meine Struktur so aus:
KaleExtendOrder -> Controllers -> Backend: KaleExtendOrder.php
Request()->getParam('orderId');
$sql = 'SELECT DISTINCT attribute5
FROM s_order_attributes attributes
INNER JOIN s_order ON s_order.id = attributes.orderID
WHERE s_order.id = :orderId
AND attribute5 IS NOT NULL';
/** @var QueryBuilder $builder */
$builder = parent::getListQuery();
try {
/** @var Connection $dbConnection */
$dbConnection = $this->get('dbal_connection');
$ids = $dbConnection->executeQuery($sql, ['orderId' => $orderId])->fetchAll(PDO::FETCH_COLUMN);
$builder->select([
'attribute.id',
'attribute.attribute5'
]);
$builder->andWhere('attribute.id IN (:attributeIds)')->setParameter('attributeIds', $ids);
} catch (Exception $e) {
// ignore
}
return $builder;
}
}
KaleExtendOrder -> Resources -> views -> backend -> order -> kale_extend_order: app.js
//{block name="backend/order/application"}
//{$smarty.block.parent}
//{include file="backend/order/kale_extend_order/store/attribute.js"}
//{include file="backend/order/kale_extend_order/model/attribute.js"}
//{/block}
KaleExtendOrder -> Resources -> views -> backend -> order -> kale_extend_order -> model: attribute.js
//{block name="backend/kale_extend_order/model/attribute"}
Ext.define('Shopware.apps.Order.KaleExtendOrder.model.Attribute', {
extend: 'Shopware.apps.Order.model.Order',
/**
* One or more BelongsTo associations for this model.
* @string
*/
belongsTo: 'Shopware.apps.Order.model.Order',
configure: function() {
return {
controller: 'KaleExtendOrder'
};
},
fields: [
{ name: 'id', type: 'int' },
{ name: 'attribute5', type: 'date' }
],
/**
* Configure the data communication
* @object
*/
proxy: {
/**
* Set proxy type to ajax
* @string
*/
type: 'ajax',
/**
* Configure the data reader
* @object
*/
reader: {
type: 'json',
root: 'data',
totalProperty: 'total'
}
}
});
//{/block}
KaleExtendOrder -> Resources -> views -> backend -> order -> kale_extend_order -> store: attribute.js
//{block name="backend/kale_extend_order/store/attribute"}
Ext.define('Shopware.apps.Order.KaleExtendOrder.store.Attribute', {
extend: 'Ext.data.Store',
model: 'Shopware.apps.Order.KaleExtendOrder.model.Attribute',
configure: function () {
return {
controller: 'KaleExtendOrder'
};
}
});
//{/block}
KaleExtendOrder -> Resources -> views -> backend -> order -> kale_extend_order -> view -> list: filter.js
//{namespace name=backend/order/main}
//{block name="backend/order/view/list/filter" append}
Ext.define('Shopware.apps.Order.view.KaleExtendOrder.list.Filter', {
override: 'Shopware.apps.Order.view.list.Filter',
createFilterForm: function() {
const me = this;
let filterList = me.callParent(arguments);
filterList.items.add(this.createFilterDateField());
return filterList;
},
createFilterDateField: function () {
// want to know s_order_attributes.attribute5
return Ext.create('Ext.form.field.Date', {
name: 'attributes.attribute5',
fieldLabel: '{s name=preferences/shippingDate}Lieferdatum{/s}',
submitFormat: 'd.m.Y'
});
},
});
//{/block}
Ich hatte davor noch ein model „order.js“ das eine „association“ auf „attributes.js“ gesetzt hat, aber das hatte auch keine Auswirkung…
Ich hoffe ihr könnt mir helfen, vielen Dank auf jeden Fall schon einmal im Voraus!