Backend Kundenübersicht mehr Spalten anzeigen

Nur zu, wenn ich kann helfe ich Dir gern. Bin Entwickler mit verstärktem Einsatz im Backendbereich (nicht nur SW)

Hallo Zusammen,

da möchte ich mich mal direkt dranhängen :wink: Habe ein ähnliches Problem. Ich habe order-list erweitert und lasse ein customfield in der Liste anzeigen. Es ist ein Datumsfeld, das ich gerne sauber formatieren möchte. Dazu habe ich auch das Template erweitert. Spalte wird ausgegeben, aber nicht formatiert.

Ich hoffe ihr könnt mir helfen, vielen Dank vorab :slight_smile:

import template from './core/component/sw-order-list-override/sw-order-list.html.twig';

const { Component } = Shopware;

Component.override('sw-order-list', {
    template,
    computed: {
        orderColumns() {
            const columns = this.$super('orderColumns');

            columns.push({
                property: 'customFields.custom_checkout_pdwe_test',
                dataIndex: 'customFields.custom_checkout_pdwe_test',
                label: 'Lieferdatum',
                inlineEdit: 'string',
                allowResize: true,
                align: 'left'
            });

            return columns;
        }
    }
});
{% block sw_order_list_grid_columns %}
{% parent %}
    {% block sw_order_list_grid_columns_delivery_date %}
    <template #column-customFields-custom_checkout_pdwe_test="{ item }">
        <sw-time-ago :date="item.customFields-custom_checkout_pdwe_test" />
    </template>
    {% endblock %}
{% endblock %}

das hier könnte Dir eine Idee geben: <template #column-customFields-custom_checkout_pdwe_test="{ item }""> {{ item.item.customFields-custom_checkout_pdwe_test | date({hour: '2-digit', minute: '2-digit'}) }} </template>

ansonsten → https://twig.symfony.com/doc/1.x/filters/date.html

Danke, das könnte gehen mit der Formatierung. Allerdings komme ich nicht so weit. Sobald ich das Feld über das Template ausgeben will (auch ohne Formatierung), kommt der Fehler „TypeError: item.customFields is null“. Wenn ich nichts ausgebe, ignoriert anscheinend das Template und gibt das Datum unformatiert aus (so wie in meinem Screenshot oben).

So sieht das Template jetzt aus:

{% block sw_order_list_grid_columns %}
{% parent %}
    {% block sw_order_list_grid_columns_delivery_date %}
    <template #column-customFields.custom_checkout_pdwe_test="{ item }">
       {{ item.customFields.custom_checkout_pdwe_test }}
    </template>
    {% endblock %}
{% endblock %}

in deinem obigen Screenshot ist ja zu sehen, dass nicht alle Zeilen einen Eintrag in „Deiner Spalte“ haben. Und die Fehlermeldung sagt Dir ja auch, dass Dein item NULL ist. Also, vorher auf !Null prüfen

Ja, das hatte ich auch vorher geprüft. Es scheint beim item gar keine customFields zu geben. Ich habe zum Test mal nur „Daten vorhanden“ ausgegeben, um Formatierungsfehler auszuschließen. In der Tabelle sehe ich aber trotzdem nur das Datum unformatiert. Das spricht dafür, dass der Block im Template gar nicht ausgegeben wird, weil „item.customFields.custom_checkout_pdwe_test“ eben NULL ist…

Vielleicht stehe ich auch auf dem Schlauch … :roll_eyes:

{% block sw_order_list_grid_columns %}
    {% parent %}
    {% if item.customFields.custom_checkout_pdwe_test is defined and item.customFields.custom_checkout_pdwe_test is not null %}
        {% block sw_order_list_grid_columns_delivery_date %}
            <template #column-customFields.custom_checkout_pdwe_test="{ item }">
               Daten vorhanden
            </template>
        {% endblock %}
    {% endif %}
{% endblock %}

warscheinlich überflüssig … ich frage trotzdem. Das twig-File bindest Du aber schon in der index.js (richtig) ein oder? Wenn es für Dich ok ist, poste doch mal die index.js

Nein, ich importiere das Template direkt in der main.js. Geht das nicht? Wenn ich folgenden Codeschnipsel nehme, ändert sich die Spalte auch, das Template wird also verwendet:

{% block sw_order_list_grid_columns %}
    {% parent %}
            <template #column-customFields.custom_checkout_pdwe_test="{ item }">
               TEST 
            </template>
{% endblock %}

sicher geht das auch so, selbst wenn das nicht der strukturell „richtige“ Weg ist. O.k. wenn das twig geladen wird, setze mal als erstes Deine ganze if-Struktur in den Block {% block sw_order_list_grid_columns_delivery_date %} - Blöcke sind nur Platzhalter und wichtig für symfony. um zu schauen, welche Variablen da sind, kannst du, wenn auch nicht wirklich schön, in den leeren Block ein {{ dump() }} schreiben

So, ich klinke mich einmal kurz wieder ein - ich habe eine Rückfrage.
Das Plugin ist eingebunden, bei mir erscheinen auch die neuen Spalten, aber für meinen Kunden tauchen die Spalten nicht in der Kundenübersicht auf - gleiches Spiel für einen Kollegen, der sich mit dem gleichem Adminaccount eingeloggt hat wie ich, aber nie auf dem heimischem Browser.

Hat das was mit dem Cache/Local Storage etc zu tun?

Da das Plugin keinen Bezug zum User/ Userrechten hat, sondern lediglich auf den Channel beschränkt werden kann, würde ich tatsächlich ein „Cache-Problem“ vermuten. Einfach mal im Browser und ggf. im Backend von SW, Cache Cookies etc. leeren/entfernen.

Also ich bin einen Schritt weiter. Es scheint einfach nicht möglich zu sein, da die Templates nicht mit Twig via PHP geparsed werden, sondern mit TwigJS und da funktionieren nicht mal die einfachsten If Statements…ich habe jetzt alles probiert, es geht einfach nicht. Ich werde das Feld jetzt als Pflichtfeld anlegen, da wir es sowieso bei jeder Bestellung brauchen und dann gibt es auch kein leeres Objekt.

PS: Hier ein ähnlicher Fall mit dem Hinweis von dem User shyim: Administration: keine Daten mit dump()

um ehrlich zu sein, erstaunt mich Deine Feststellung etwas, da ich ständig nichts Anderes mache. Im Backend, das ist richtig, wird Vue.js verwendet. Hast Du das Setzen von Bedingungen nach Vue-Syntax vorgenommen etwa so (nur ein Besipiel): <template #column-customFields.custom_checkout_pdwe_test="{ item }"> <sw-label v-if="column-customFields.custom_checkout_pdwe_test" appearance="pill" size="small" class="sw-order-list__manual-order-label"> {{ item.item.customFields-custom_checkout_pdwe_test | date({hour: '2-digit', minute: '2-digit'}) }} </sw-label> </template> ? Appereance könntest Du dann ja ändern. Ist nur zur besseren Sichtbarkeit

2 „Gefällt mir“

die Ausgabe von dump kommt übrigens nicht direkt auf der Webseite sondern in der Console raus, funktioniert aber.

1 „Gefällt mir“

Ok, danke. Mit Vue habe ich noch nie gearbeitet. Das sw-label „v-if“ scheint dann die IF Bedingung zu sein?

So hat es nun funktioniert, vielen Dank für die Hilfe!

{% block sw_order_list_grid_columns %}
   {% parent %}
   {% block sw_order_list_grid_columns_delivery_date %}
      <template #column-customFields.custom_checkout_pdwe_test="{ item }">
        <div v-if="item.customFields">{{ item.customFields.custom_checkout_pdwe_test| date({hour: '2-digit', minute: '2-digit'}) }}</div>
      </template>
   {% endblock %}
{% endblock %}

Ich stehe vor demselben Problem und möchte die Bestellübersichtsseite um eine Spalte erweitern. Leider sehe ich gerade den Wald vor lauter Bäumen nicht und weiß nicht so recht, wie ich im Adminbereich etwas erweitern kann. Im Frontend ist das kein Problem für mich.

Folgendes Szenario. Ich möchte eine weitere Spalte einfügen, mit Informationen, die bereits in einem CustomField welche der Bestellung zugeordnet ist Erweitern. Die Information in dem Feld schieben wir über die API in das Textfeld. Es handelt sich hierbei nur um eine interne Produktionsnummer.

Kann mir hier vielleicht jemand auf die Sprünge helfen, um die Nummer in einer weiteren Spalte anzuzeigen und nicht nur auf der Bestell-Detailseite? Bin für jede Hilfe dankbar.

Aktuell verwenden wir SW 6.4.20.0

LG
Martin

Es gibt im Store ein kostenloses Plugin, dass die Tracking Nummer anzeigt. Herunterladen, Code ansehen, nachbauen, minimal abändern, hoffentlich erfolgreich :smile:

Danke für den Tipp. Das werde ich mal versuchen. :+1: