# Wie kann ich bei Backend Plugins in einem store als filter eine function verwenden?

**URL:** https://forum.shopware.com/t/wie-kann-ich-bei-backend-plugins-in-einem-store-als-filter-eine-function-verwenden/55361
**Category:** Programmierung
**Created:** [24. September 2018 um 07:27 UTC](https://forum.shopware.com/t/wie-kann-ich-bei-backend-plugins-in-einem-store-als-filter-eine-function-verwenden/55361 "2018-09-24T07:27:29Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![MrWulf](https://avatars.discourse-cdn.com/v4/letter/m/7ab992/32.png) [@MrWulf](https://forum.shopware.com/u/MrWulf)
#### Post date: [24. September 2018 um 07:27 UTC](https://forum.shopware.com/t/wie-kann-ich-bei-backend-plugins-in-einem-store-als-filter-eine-function-verwenden/55361/1 "2018-09-24T07:27:29Z")

</div>

Moin,

ich habe folgendes Problem. Ich habe bei den Artikeln ein&nbsp;Multiselectfreitexteld hinzugefügt. In meinem Plugin wollte ich nun in einem Listing alle Artikel anzeigen die weniger als zehn Einträge in dem Freitextfeld ausgewählt haben. Da die Werte aus den Multiselectboxen in der Datenbank als String mit einer Pipe als Separator abgespeichert werden, war mein Gedanke dies&nbsp;im Store über die&nbsp;Filter&nbsp;zu lösen. Laut Dokumentation bei Sencha ließe sich mit folgendem Code ein Filter mit einer Funktion zusammenbauen:&nbsp;

```
var longNameFilter = new Ext.util.Filter({
    filterFn: function(item) {
        return item.name.length > 4;
    }
});

```

Ich habe dann versucht das Ganze als filter folgendermaßen einzubauen:

```
filters:
[
    {
	    filterFn: function(item)
		{
			return item.freitextfeldname.split("|").length < 10;
		}
	}
]

```

Da kein Fehler geworfen wird scheint&nbsp;mir das Ganze zumindest vom Syntax her richtig zu sein. Der Filter an sich scheint aber nicht zu funktionieren bzw. es werden immer alle Datensätze ausgegeben. Meine Frage hierzu ist nun: Kann mir jemand sagen ob das generell so funktionieren würde? Oder falls nicht (bzw. wenn die Antwort darauf nicht klar ist) wie man eine solche Funktionalität abbilden könnte?

---

<div class="post-metadata">

### Author: ![MrWulf](https://avatars.discourse-cdn.com/v4/letter/m/7ab992/32.png) [@MrWulf](https://forum.shopware.com/u/MrWulf)
#### Post date: [27. September 2018 um 07:50 UTC](https://forum.shopware.com/t/wie-kann-ich-bei-backend-plugins-in-einem-store-als-filter-eine-function-verwenden/55361/2 "2018-09-27T07:50:10Z")

</div>

Kurzes Update: Da ich hier absolut nicht weitergekommen bin, ist der augenblickliche Ansatz ein weiteres (im Backend nicht angezeigtes) Freitextfeld einzubauen. Bei jedem Speichern eines Artikels (über “after” Hooks auf Shopware\_Controllers\_Backend\_Article::saveAction und Shopware\_Controllers\_Backend\_Article::saveDetailAction ) kann ich nun jeweils eine konkrete Anzahl an Artikeln mit in der Datenbank ablegen und ganz normal danach Filtern lassen.  
Auch diese Lösung ist noch nicht wirklich gut, da bei dem Auslösen des Hooks anscheinend die Tabelle Artikel Attributes noch nicht befüllt wurde. Die Anzahl die deswegen hinterlegt wird ist die Anzahl an Elementen die vor dem öffnen des Artikels im Feld hinterlegt war. Somit muss man immer zweimal speichern um die richtige Anzahl zu kriegen.

Deswegen wäre die Frage nun, gibt es einen Hook oder ein Event das erst nach dem befüllen der s\_articles\_attributes greift?

Ich habe hier auch einmal versucht über “Shopware\Models\Article\Article::postUpdate” direkt auf ein Update zu reagieren. Das führt allerdings zumindest in meiner dev Umgebung (Windows) zu zahlreichen Fehlern. Weswegen ich das so nicht im Livesystem ausprobieren möchte. Ich halte es allerdings auch für gut möglich, dass ich hier beim Einbau etwas vergessen haben könnte und es deswegen zu den Fehlern kommt.

---

<div class="post-metadata">

### Author: ![netzperfekt](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/netzperfekt/32/7765_2.png) [@netzperfekt](https://forum.shopware.com/u/netzperfekt)
#### Post date: [27. September 2018 um 08:43 UTC](https://forum.shopware.com/t/wie-kann-ich-bei-backend-plugins-in-einem-store-als-filter-eine-function-verwenden/55361/3 "2018-09-27T08:43:27Z")

</div>

Moin&nbsp;@MrWulf‍,

ich nutze die ExtJS-Filter in einem Plugin erfolgreich und binde sie so ein:

```
createFilters: function() {
	var me = this;
	
	me.pastEventsFilter = Ext.create('Ext.util.Filter', {
		id: 'pastEventsFilter',
	    filterFn: function(item) {  
	
			return ;
		}
	});
}

```

Ich aktiviere sie allerdings in der _initComponent_-Methode des Plugins, und irgendwie musste ich die _pageSize_&nbsp;noch hochsetzen (ist zu lange her…):&nbsp; &nbsp;

```
initComponent: function () {
	var me = this;

    me.callParent(arguments);

    me.createFilters();
    me.store.filter(me.pastEventsFilter);
    me.store.pageSize = 9999; // alle laden, sonst greift der Filter bei vielen vergangenen Events nicht
    me.store.currentPage = 1;
    me.store.load();
}

```

Vielleicht kommst Du so noch weiter.

Grüße  
Nils

---

<div class="post-metadata">

### Author: ![MrWulf](https://avatars.discourse-cdn.com/v4/letter/m/7ab992/32.png) [@MrWulf](https://forum.shopware.com/u/MrWulf)
#### Post date: [28. September 2018 um 09:12 UTC](https://forum.shopware.com/t/wie-kann-ich-bei-backend-plugins-in-einem-store-als-filter-eine-function-verwenden/55361/4 "2018-09-28T09:12:16Z")

</div>

Moin Nils,

leider scheint das bei meinem Plugin&nbsp;nicht so ganz zu&nbsp;funktionieren. Die Parameter die ich hier neu setze werden zwar übernommen und auch verwendet, aber der Filter ändert die angezeigten Datensätze nicht. Ist also im Prinzip dasselbe Bild wie auch bei meinen vorherigen Versuchen.

Allerdings habe ich nun einen funktionierenden Workarround. Ich lausche nun auf das Event “Enlight\_Controller\_Action\_PostDispatch\_Backend”. Immer wenn nun der Controller “AttributeData” und die action “saveData” ist mache ich ein update auf s\_articles\_attributes um die Anzahl zu aktualisieren. Dasselbe nochmal wenn der Controller der von meinem Plugin ist und die action “update”. Das scheint soweit&nbsp;zu funktionieren, erscheint mir jedoch ziemlich umständlich.
