Ich habe einen neuen Menüpunkt im Adminbereich ergänzt, der eine eigene Tabelle tabellarisch ausgeben soll. Dazu greife ich über ein repository auf die Tabelle zu (wie hier beschrieben Using the data handling - Shopware Developer) und gebe das dann über aus. Das funktioniert auch.
Ich möchte zum einen anstatt true/false Icons (Check/Cross) oder ähnliches anzeigen. Außerdem möchte ich eine neue Spalte („computed column“) ergänzen. Aktuell gibt es 2 Spalten startDate und endDate und die neue Spalte soll Duration heißen und die Differenz dazu sein, bspw. sollte dann sowas drin stehen wie „3h 41min“. Ich habe in der Doku nichts gefunden, wie sich das realisieren ließe.
import template from './abas-catalog-sync-list.html.twig';
const { Component, Data, Context } = Shopware;
const { Criteria } = Data;
Component.register('abas-catalog-sync-list', {
template,
inject: [
'repositoryFactory',
],
data() {
return {
result: undefined,
};
},
metaInfo() {
return {
title: this.$createTitle(),
};
},
computed: {
abasSyncResultRepository() {
return this.repositoryFactory.create('abas_sync_result');
},
columns() {
return [{
property: 'syncName',
dataIndex: 'syncName',
label: this.$tc('abas-catalog-sync.list.columns.syncName'),
allowResize: true,
}, {
property: 'success',
dataIndex: 'success',
label: this.$tc('abas-catalog-sync.list.columns.success'),
allowResize: true,
}, {
property: 'startDate',
dataIndex: 'startDate',
label: this.$tc('abas-catalog-sync.list.columns.startDate'),
allowResize: true,
}, {
property: 'endDate',
dataIndex: 'endDate',
label: this.$tc('abas-catalog-sync.list.columns.endDate'),
allowResize: true,
}, {
property: 'error',
dataIndex: 'error',
label: this.$tc('abas-catalog-sync.list.columns.error'),
allowResize: true,
}];
},
},
created() {
const criteria = new Criteria();
criteria.addFilter(Criteria.equalsAny('abas_sync_result.syncName', ['CatalogSync', 'MediaSync']));
criteria.addSorting(
Criteria.sort('abas_sync_result.startDate', 'DESC'),
);
return this.abasSyncResultRepository
.search(criteria, Context.api)
.then((result) => {
this.result = result;
return result;
});
},
});
{% block abas_catalog_sync_list %}
<sw-page class="abas-catalog-sync-list">
<template slot="content">
{% block abas_catalog_sync_list_content %}
<sw-entity-listing
v-if="result"
:items="result"
:repository="abasSyncResultRepository"
:showSelection="true"
:columns="columns"
:allowDelete="true">
</sw-entity-listing>
{% endblock %}
</template>
</sw-page>
{% endblock %}
Die Tabelle sieht moment so aus: