Magento 2 - DateTime UI Bileşeni nasıl eklenir


18

Yeni sayfa eklerken CMS sayfa bölümünde datetime olarak yeni alan eklemek istiyorum, bunun için UI Bileşeni kullanarak magento buldum, bu yüzden kazma sonra aşağıdaki kodu kullanarak tarih alanını ekleyebilir ama datetime alanı ekleyemedi. Birisi yardım edebilir mi?

Tarih ekleme alanı kodu:

<field name="start_date">
    <argument name="data" xsi:type="array">
        <item name="config" xsi:type="array">
            <item name="dataType" xsi:type="string">string</item>
            <item name="label" xsi:type="string" translate="true">Go Live Start Date</item>
            <item name="formElement" xsi:type="string">date</item>
            <item name="source" xsi:type="string">page</item>
            <item name="sortOrder" xsi:type="number">21</item>
            <item name="dataScope" xsi:type="string">start_date</item>
            <item name="validation" xsi:type="array">
                <item name="required-entry" xsi:type="boolean">true</item>
            </item>
        </item>
    </argument>
</field>

Başarmak için geçersiz kılmamız gereken dosya:

vendor/magento/module-cms/view/adminhtml/ui_component/cms_block_form.xml

@sivakumar Cevabımın size yardımcı olup olmadığı?
Siarhey Uchukhlebau

Evet @SiarheyUchukhlebau, Çok yardımcı oldu.
MagentoDev


@TejabhagavanKollepara Neden 9 ay önce sorulan soruyu, 4 ay önce sorulan sorunun kopyası olarak işaretliyorsunuz ?!
Siarhey Uchukhlebau

Yanıtlar:


32

DateTime seçicisini eklemek için xml dosyasının içindeki bir sonraki yönergeyi kullanmalısınız:

<field name="start_date">
    <argument name="data" xsi:type="array">
        <item name="config" xsi:type="array">
            <item name="dataType" xsi:type="string">string</item>
            <item name="label" xsi:type="string" translate="true">Go Live Start Date</item>
            <item name="formElement" xsi:type="string">date</item>
            <item name="source" xsi:type="string">page</item>
            <item name="sortOrder" xsi:type="number">21</item>
            <item name="dataScope" xsi:type="string">start_date</item>
            <item name="validation" xsi:type="array">
                <item name="required-entry" xsi:type="boolean">true</item>
            </item>
            <item name="options" xsi:type="array">
                <item name="dateFormat" xsi:type="string">yyyy-MM-dd</item>
                <item name="timeFormat" xsi:type="string">HH:mm:ss</item>
                <item name="showsTime" xsi:type="boolean">true</item>
            </item>
        </item>
    </argument>
</field>

Önemli olan showsTimeseçenek.

Sonuç şöyle görünmelidir:

date-time ui element sonucu

UI öğesinde hata ayıklamak istiyorsanız - bu komutu tarayıcı konsolunda (sayfanızda) kullanın:

require('uiRegistry').get('index = start_date')

Öğenizi datetüm başlangıç ​​seçenekleriyle ve olası tüm işlevlerle döndürür :

UI öğesi nesnesi

Öğeyi (xml içinde) tanımlarken kullanabilirsiniz.

Ek bilgi olarak:

date(Ayrıca dateTime) eleman burada bulunamadı:

app/code/Magento/Ui/view/base/web/js/form/element/date.js

statik dosyalarda:

pub/static/adminhtml/Magento/backend/en_US/Magento_Ui/js/form/element/date.js

Date-element sınıfının (nesne), prepareDateTimeFormatsönemli seçeneğin showsTimeişaretlendiği bir yöntemi vardır :

/**
 * Prepares and converts all date/time formats to be compatible
 * with moment.js library.
 */
prepareDateTimeFormats: function () {
    this.pickerDateTimeFormat = this.options.dateFormat;

    if (this.options.showsTime) {
        this.pickerDateTimeFormat += ' ' + this.options.timeFormat;
    }

    this.pickerDateTimeFormat = utils.normalizeDate(this.pickerDateTimeFormat);

    if (this.dateFormat) {
        this.inputDateFormat = this.dateFormat;
    }

    this.inputDateFormat = utils.normalizeDate(this.inputDateFormat);
    this.outputDateFormat = utils.normalizeDate(this.outputDateFormat);

    this.validationParams.dateFormat = this.outputDateFormat;
}

Yalnızca zaman seçiciyi göstermek istersem ne olur? @Siarhey
Ronak Chauhan

@RonakChauhan DateTimeÖğenin her zaman tarih oluşturduğu için başka bir özel öğeye ihtiyacınız var .
Siarhey Uchukhlebau

ama bunu nasıl yapabilirim?
Ronak Chauhan

@RonakChauhan Soyut UI öğesini genişletmeli ve benzeri bir şey kullanmalısınız.timepicker()
Siarhey Uchukhlebau

1
Kendim çözüm bul, cevabın bir sahiptir yanlış TIMEFORMAT , biz değiştirmek gerek hh:mm:ssiçin HH:mm:ssaksi UI Componet içinde 03:00:00 PMoldu olacak 03:00:00 AM, 12 saat eksikliği ve olamaz PM zamanında tasarruf veritabanı tablosunda.
Key Shang

2

Umarım bu cevap neyi özlediğiniz hakkında bir fikir verir

Ben php aracılığıyla tarih saat alanının UI bileşeni ekledim (iyi çalışıyor)

$fieldset->addField(
        'event_date',
        'date',
        [
            'name' => 'event_date',
            'label' => __('Date'),
            'title' => __('Date'),
            'required' => true,
            'date_format' => 'yyyy-MM-dd',
            'time_format' => 'hh:mm:ss'
        ]
);

referans için kolay

xml dosyanızla karşılaştırıldığında date_format ve time_format dışındaki tüm değerler bulunur iki değeri de ayarlayabilmeniz için

daha fazla ayrıntı için lütfen bu tam kaynak koduna bakın


"Vendor / magento / module-cms / view / adminhtml / ui_component / cms_block_form.xml" dosyasını inceleyip yukarıdaki kodu nasıl entegre edebileceğimi bana bildirir misiniz?
MagentoDev

sourceÖzel adımı nasıl değiştirebilirim ? Burada hangi gereksinimler var?
Vasilii Burlacu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.