Backend Kundenübersicht mehr Spalten anzeigen

Ich möchte hier echt niemanden verschaukeln - aber JETZT funktioniert es.
Spalte wird angezeigt, lässt sich einstellen über das Menü, verschieben, etc. - ich werde jetzt noch eine 2. Spalte hinzufügen (createdAt) und werde dann wissen, ob es jetzt ohne Probleme klappt.

Ich melde mich dann im Anschluss hier - aber eines Vorweg - der Code war nicht das Problem. o.O

wenn das Ergebnis passt ist doch alles i.O. :wink:

Ok, jetzt habe ich 0 Probleme, neue Spalten einzufügen.
„createdAt“ als Spalte war wegen der date-Formatierung etwas fummelig, aber in der „sw-order-list“ im Shopware-Core ist das als Beispiel anzeigbar.
Ich danke dir vom Herzen moschadr :smiley:
Du hast es geschafft, dass ich das Mini-Plugin heute fertig kriege und das noch im Zeitrahmen.
Wenn du nichts dagegen hast, würde ich mich bei einem erneut auftauchendem Problem gerne auch an dich wenden bzgl. JS im Backend - das ist weniger meine Stärke…

MfG

Heldchen

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

1 Like

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

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 %}