Magento 2 - Як додати компонент інтерфейсу DateTime


18

Я хочу додати нове поле як дату в розділ сторінки CMS, додаючи нову сторінку, я виявив, що magento використовує для нього компонент інтерфейсу, тому після копання я міг додати поле дати за допомогою наведеного нижче коду, але не зміг додати поле дати. Хтось може на цьому допомогти.

Код для поля дати дати:

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

Файл, який нам потрібно змінити, щоб досягти:

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

@sivakumar Чи допомогла вам моя відповідь?
Siarhey Uchukhlebau

Так @SiarheyUchukhlebau, це дуже допомогло.
MagentoDev


@TejabhagavanKollepara Чому ви позначаєте запитання, задане 9 місяців тому, як дублікат запитання, заданого 4 місяці тому ?!
Сергій Учукхлебау

Відповіді:


32

Для додавання вибору timeTime слід використовувати наступну директиву всередині файлу xml:

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

Важливим є showsTimeваріант.

Результат повинен виглядати так:

Результат елемента інтерфейсу дата-час

Якщо ви хочете налагодити елемент інтерфейсу, використовуйте цю команду всередині консолі браузера (на своїй сторінці):

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

Він повертає ваш dateелемент з усіма початковими параметрами та всіма можливими функціями:

Об'єкт елементів інтерфейсу

Ви можете використовувати їх під час визначення елемента (всередині xml).

В якості додаткової інформації:

Елемент date(також dateTime) можна знайти тут:

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

у статичних файлах:

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

Клас елементів (об'єкт) дати має метод prepareDateTimeFormats, у якому showsTimeперевіряється важливий варіант :

/**
 * 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;
}

Що робити, якщо я хочу показати лише інструмент вибору часу? @Siarhey
Ронак Чаухан

@RonakChauhan Вам потрібен інший користувальницький елемент, оскільки DateTimeелемент завжди відображає дату.
Сіархей Учукхлебау

але як це зробити?
Ронак Чаухан

@RonakChauhan Ви повинні розширити абстрактний елемент інтерфейсу та використовувати щось на кшталт.timepicker()
Siarhey Uchukhlebau

1
Знайти рішення по собі, ваша відповідь має неправильний TimeFormat , нам потрібно змінити , hh:mm:ssщоб HH:mm:ssв UI Componet, в іншому випадку 03:00:00 PMбуде стало 03:00:00 AM, НЕ бракує 12 годин , і ви не можете зберегти час PM в таблиці бази даних.
Ключ Шан

2

Я сподіваюся, що ця відповідь дає деяке уявлення про те, що ви сумуєте

Я додав компонент інтерфейсу користувача у полі часу через php (він працює чудово)

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

легко для вашої довідки

порівняйте з вашим файлом xml усі значення присутні, крім date_format та time_format, так що ви можете спробувати встановити обидва значення у вашому XML-файлі

для отримання детальної інформації див. цей повний вихідний код


Чи можете ви перейти через файл "vendor / magento / module-cms / view / adminhtml / ui_component / cms_block_form.xml", і дайте мені знати, як я можу інтегрувати вищевказаний код.
MagentoDev

Як я можу змінити sourceсвоє власне ім’я? Які тут вимоги?
Василь Бурлаку
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.