DateTime Darstellung im Backend

hallo zusammen

Ich habe 2 Datumswerte “von” - “bis” und würde hier gerne sowohl datum als auch uhrzeit auswählen können - im backend von shopware!

**fields** : [ { **name** : **'id'** , **type** : **'int'** , **useNull** : **true** }, { **name** : **'validfrom'** , **type** : **'datetime'** , **dateFormat** : **'d.m.Y H:i'** }, { **name** : **'validuntil'** , **type** : **'datetime'** , **dateFormat** : **'d.m.Y H:i'** },

bzw. php model

_/\*\*_ _\*_ _@var_ _\DateTime $validfrom_ _\*_ _\*_ _@ORM\Column__(type="datetime", nullable=true)_ _\*/_ **private**  **$validfrom** = **null** ; _/\*\*_ _\*_ _@var_ _\DateTime $validuntil_ _\*_ _\*_ _@ORM\Column__(type="datetime", nullable=true)_ _\*/_ **private**  **$validuntil** = **null** ; 

Die Felder werden in der DB richtig as Datetime angelegt, wenn ich diese aber dann in der Form anzeigen möchte können diese weder angelegt noch bearbeitet werden.

Ich hätte da gern so eine DateTime auswahl wie bei Einstellungen -> Cronjob.

Weiß jemand wie das genau funktioniert oder brauch ich da noch zusätzliche Einstellungen damit das sowohl richtig angezeigt bzw. dann auch korrekte gebindet und gespeichert wird?

 

lg Andreas

Hey azeiner,

du kannst einfach mal im Shopware Code schauen wie es da gelöst wurde, die Dateien für die Cronform findest du hier:
Model:  themes/Backend/ExtJs/backend/config/model/form/cron_job.js
View: themes/Backend/ExtJs/backend/config/view/form/cron_job.js

Grüße,
Simon

1 „Gefällt mir“

Danke Simon für die rasche Antwort!!! lg Andreas

Hab mir das jetzt reingezogen - wird die date_time.js im

**Shopware.model.**** Container** 

auf geladen? ich bekomme da lediglich einen fehler wenn ich

den xtype setzen möchte

 configure: **function** () { **return** { **controller** : **'contoller'** , **fieldSets** : [{ **title** : **'Shop Öffnungszeiten'** , **fields** : { **validfrom** : **'Von'** , **validuntil** : **{fieldLabel:'Bis', xtype: 'config-element-datetime'** } }... 

selbiges funktioniert im

Ext.panel.Panel bzw. der Ableitung

**Shopware.apps.Config.view.base.Form**

durchaus …

also so richtig steig ich da nicht durch …

dieses tutorial

 description: this.createDescription, descriptionLong: { fieldLabel: **null** , xtype: 'tinymce' } } }] }; },   createDescription: **function** (model, formField) { formField.xtype = 'textarea'; formField.height = 90; formField.grow = **true** ; return formField; }

beschreibt ja recht schön wie es funken könnte - sobald ich statt textarea, die aber auch in den basiskomponeten enthalten ist, den xtype=" config-element-datetime"

setze bekomme ich lediglich ein paar javascript fehlermeldungen und das wars …

hm … das plugin deshalb umzubauen wäre zwar möglich aber vl. überseh ich was!

lg andreas

 

 

Hey,

das ist ein Auszug aus der themes/Backend/ExtJs/backend/newsletter_manager/view/newsletter/settings.js: 

   /**
     * Returns the date and time configuration for the timed delivering of newsletter
     */
    getTimedDeliveryFieldSet: function() {
        var me = this;

        me.timedDeliveryTimeField = Ext.create('Ext.form.field.Time', {
            allowBlank: true,
            name: 'timedDeliveryTime',
            value: Ext.Date.parse('6pm', 'ga'),
            helpTitle: '{s name=send_at/support/title}Configure time of delivery{/s}',
            helpText: '{s name=send_at/support/text}With this setting you can define when you want to send the newsletter. The execution of the newsletter can be for example via a cron job. This setting is optional.{/s}',
            listeners: {
                change: function(field, newValue, oldValue) {
                    me.fireEvent('changeDeliveryTime', me.record, newValue, oldValue);
                },
                render: function(field) {
                    field.setValue(me.record.get('timedDelivery'));
                }
            },
            validator: function(value) {
                var timedDelivery = Ext.getCmp('timedDeliveryDate');

                if (!me.timedDeliveryDateField.getValue() && value) {
                    me.timedDeliveryDateField.markInvalid('{s name=send_at/error/no_date}You must configure the date.{/s}');
                }

                if (value && !timedDelivery.getValue()) {
                    return '{s name=send_at/error/no_date}You must configure the date.{/s}';
                }

                return true;
            }
        });

        me.timedDeliveryDateField = Ext.create('Ext.form.field.Date', {
            fieldLabel: '{s name=send_at}Send at:{/s}',
            allowBlank: true,
            name: 'timedDeliveryDate',
            id: 'timedDeliveryDate',
            width: '40%',
            minValue: new Date(),
            listeners: {
                change: function(field, newValue, oldValue) {
                    me.fireEvent('changeDeliveryDate', me.record, newValue, oldValue);
                    me.setTimeFieldMinValue();
                },
                render: function(field) {
                    field.setValue(me.record.get('timedDelivery'));
                }
            }
        });

        return [
            me.timedDeliveryDateField,
            me.timedDeliveryTimeField
        ];
    },

Das wäre die funktion aus dem Newslettermanager. Hoffe das hilft dir weiter :wink:

Grüße,
Simon

1 „Gefällt mir“

dank dir simon!!! ich probier das gleich morgen!!! glg andreas

hi zusammen

also nach dem beispiel funkt das in kombination mit der anwendung nicht so ganz - egal was ich mache es fehlt einfach immer etwas, ev. sollte ich das gesamte plugin kopieren aber wenn das mit den zeitfeldern so nicht geht, welche möchtlichkeit gäbe es dann datum-zeit zumindest eingebbar zu machen? ausser in ein textfeld?

tutorials hab ich keine gefunden, reverse-engineering funkt nur teilweise weil ich bei mir das in dieses detail.js (auf basis des tutorials) nicht reinbekommen ohne fehler …

vl. weiß irgendwer rat oder hat einen tipp! thx!

Ext.define('Shopware.apps.NetswerkShopOpeningHours.view.detail.NetswerkShopOpeningHours', {
    extend: 'Shopware.model.Container',
    padding: 20,

    configure: function() {
        var me = this;

        return {
            controller: 'NetswerkShopOpeningHours',
            fieldSets: [{
                title: 'Shop Öffnungszeiten',
                fields: {
                    validfrom: 'Startdatum',
                    validuntil: 'Endedatum',
                }
            }, {
                title: 'Abholdaten',
                fields: {
                    pickupdate: 'Abholdatum',
                }
            },{
                    title: 'Zusatzinfos',
                    fields: {
                        active: 'Eintrag aktiv',
                        description: 'Zusatzbeschreibung'
                    }
                }
            ]
        };
    },

   
});

 

@Simon Bäumer schrieb:

Hey,

das ist ein Auszug aus der themes/Backend/ExtJs/backend/newsletter_manager/view/newsletter/settings.js: 

/**

  • Returns the date and time configuration for the timed delivering of newsletter
    */
    getTimedDeliveryFieldSet: function() {
    var me = this;

me.timedDeliveryTimeField = Ext.create(‚Ext.form.field.Time‘, {
allowBlank: true,
name: ‚timedDeliveryTime‘,
value: Ext.Date.parse(‚6pm‘, ‚ga‘),
helpTitle: ‚{s name=send_at/support/title}Configure time of delivery{/s}‘,
helpText: ‚{s name=send_at/support/text}With this setting you can define when you want to send the newsletter. The execution of the newsletter can be for example via a cron job. This setting is optional.{/s}‘,
listeners: {
change: function(field, newValue, oldValue) {
me.fireEvent(‚changeDeliveryTime‘, me.record, newValue, oldValue);
},
render: function(field) {
field.setValue(me.record.get(‚timedDelivery‘));
}
},
validator: function(value) {
var timedDelivery = Ext.getCmp(‚timedDeliveryDate‘);

if (!me.timedDeliveryDateField.getValue() && value) {
me.timedDeliveryDateField.markInvalid(‚{s name=send_at/error/no_date}You must configure the date.{/s}‘);
}

if (value && !timedDelivery.getValue()) {
return ‚{s name=send_at/error/no_date}You must configure the date.{/s}‘;
}

return true;
}
});

me.timedDeliveryDateField = Ext.create(‚Ext.form.field.Date‘, {
fieldLabel: ‚{s name=send_at}Send at:{/s}‘,
allowBlank: true,
name: ‚timedDeliveryDate‘,
id: ‚timedDeliveryDate‘,
width: ‚40%‘,
minValue: new Date(),
listeners: {
change: function(field, newValue, oldValue) {
me.fireEvent(‚changeDeliveryDate‘, me.record, newValue, oldValue);
me.setTimeFieldMinValue();
},
render: function(field) {
field.setValue(me.record.get(‚timedDelivery‘));
}
}
});

return [
me.timedDeliveryDateField,
me.timedDeliveryTimeField
];
},

Das wäre die funktion aus dem Newslettermanager. Hoffe das hilft dir weiter ;)

Grüße,
Simon