Ok, ich habe es nun so gelöst:
Ich habe ein neues Feld dem Filterpanel hinzugefügt, indem ich beim FilterPanel die function createFilterFields und createFilters erweitere:
createFilterFields: function() {
var me = this,
container = me.callParent(arguments);
var tagField = me.createTagFilterField();
container.items.add(tagField);
return container;
},
createTagFilterField: function() {
var me = this,
formField = {};
formField.xtype = 'textfield';
formField.anchor = '100%';
formField.margin = '0 3 7 0';
formField.labelWidth = 130;
formField.name = 'tags';
formField.fieldLabel = 'Tags';
//create filter field container to add a checkbox for each field.
return Ext.create('Shopware.filter.Field', {
field: formField,
subApp: me.subApp
});
},
createFilters: function() {
var me = this;
me.callParent();
var values = me.getForm().getValues();
me.gridPanel.getStore().filters.add(
'tags',
Ext.create('Ext.util.Filter', {
property: 'tags',
value: values['tags']
})
);
}
Dadurch bekomme ich beim list request an den Controller property: tags und value: …
page:1
start:0
limit:20
filter:[{"property":"tags","value":"test","operator":null,"expression":null}]
Jetzt kann ich bequem in der getList separate operationen durchführen und nach belieben die Daten raussuchen:
protected function getList($offset, $limit, $sort = array(), $filter = array(), array $wholeParams = array())
{
// capture custom filters from backend list
foreach ($filter as $condition) {
if (isset($condition['property']) && $condition['property'] == 'tags') {
$result = $this->getListByTagFilter($condition['value'], $offset, $limit, $sort, $filter, $wholeParams);
}
}
// fallback if no custom filter was set:
if (empty($result)) {
$result = parent::getList($offset, $limit, $sort, $filter, $wholeParams);
}
// get additional data
if ($result && !empty($result) && $result['success']) {
foreach ($result['data'] as $key => $data) {
$result['data'][$key] = $this->getAdditionalDetailData($data);
}
}
return $result;
}