Shopware 6: Eigene Entitäten in der globalen Admin-Suche

Oft ist es sehr viel einfacher direkt etwas in die Suche der Administration einzugeben, als umständlich eine Seite zu öffnen und etwas aus der Liste per Hand oder Browser-Suche heraus zu suchen.
Eigene oder fehlende Entitäten dort zu integrieren ist an sich recht einfach und logisch. Es gibt hier eine Anleitung die aber leider so für mich nicht funktioniert hat, weil ein wichtiger Teil fehlte.

https://developer.shopware.com/docs/guides/plugins/plugins/administration/search-custom-data.html

Routennamen sind hier erstmal nur Beispiel haft vergeben.

Step 1
Ich gehe davon aus das ein Plugin existiert mit einem JS-Module, das mindestens eine Route hat und dessen Name nach dem Schema {vendor}-{name} aufgebaut ist. Zum Module müssen wir wie beschrieben
einige wenige Dinge ergänzen:


{
...

entity: 'ce_my_entity',
...
}


hier kommt später noch was dazu!

Step 2

Den Type (der Entität) hinzufügen. Der Name muss nicht dem Namen der Entität entsprechen, ist aber nicht verkehrt es so zu machen.


Application.addServiceProviderDecorator('searchTypeService', searchTypeService => {
searchTypeService.upsertType('ce_my_entity', {
entityName: 'ce_my_entity',
placeholderSnippet: 'search.general.placeholderSearchBar',
listingRoute: 'hpr.searchexample.index',
});
return searchTypeService;
});


Damit kennt die Suche nun den neuen Type und dann theoretisch schon danach suchen.

Step 3

Jetzt müssen wir festlegen wie unsere Entität bei den Ergebnissen dargestellt werden soll. Dafür erweitern wir ein Template und machen es der Suche bekannt.

Twig:

{% block sw_search_bar_item_cms_page %}
{% parent %}

<router-link v-else-if="type === 'ce_my_entity'"
v-bind:to="{ name: 'hpr.searchexample.detail', params: { id: item.id } }"
ref="routerLink"
class="sw-search-bar-item__link">
{% block sw_search_bar_item_ceme_label %}
<span class="sw-search-bar-item__label">
<sw-highlight-text v-bind:searchTerm="searchTerm"
v-bind:text="item.name">
</sw-highlight-text>
</span>
{% endblock %}
</router-link>
{% endblock %}


JavaScript:

Shopware.Component.override('sw-search-bar-item', {
template: templateItem
});


Step 4

Jetzt muss die Suche nur noch wissen wie unsere Entität bezeichnet werden soll, was wir bei den Snippets des Modules mit hinterlegen.


{
"global": {
"entities": {
"ce_my_entity": "Meine Entität"
}
}
}


Was noch fehlt
Soweit ist alles gut und nach Anleitung. Aber es funktionierte einfach nicht. Es wurde nach allen möglichen Entitäten gesucht nur nicht nach der eigenen. Nach viel Gesuche kam ich dann darauf, dass bei den Preferences, die für die Liste der Entities genutzt wird, meine eigene garnicht aufgelistet wurde. Warum? Weil ich natürlich keine Preferences dafür hinterlegt hatte, weil es nirgendwo angegeben war.

Das JS-Module muss also so aussehen:

{
...
entity: 'ce_my_entity',
defaultSearchConfiguration: {
_searchable: true,
name: {
_searchable: true,
_score: searchRankingPoint.HIGH_SEARCH_RANKING,
},
description: {
_searchable: true,
_score: searchRankingPoint.HIGH_SEARCH_RANKING,
}
}
...

}


Diese Preferences findet man im Profile seine Admin-Users und kann es dort alles noch genauer anpassen, wie die Suche suchen soll. Hier werden nun die Felder name und description angeboten und auch direkt aktiviert.


Damit funktionierte die Suche dann auch sofort wie gewünscht.
User annonyme 2023-10-06 17:49

Not able to write comment
Comments are disabled for this blog-entry.

Möchtest Du AdSense-Werbung erlauben und mir damit helfen die laufenden Kosten des Blogs tragen zu können?