Magento 2 Mostrar selector de tiempo usando UiComponent

8

Quiero mostrar Timepicker en forma de componente Ui. Pude agregar el campo de tiempo usando el siguiente código pero no pude guardar el valor. ¿Alguien puede ayudar en eso?

   <field name="start_time">
        <argument name="data" xsi:type="array">                
            <item name="config" xsi:type="array">                    
                <item name="dataType" xsi:type="string">text</item>
                <item name="label" xsi:type="string" translate="true">Start Time</item>
                <item name="formElement" xsi:type="string">date</item>
                <item name="source" xsi:type="string">prmrule</item>
                <item name="dataScope" xsi:type="string">start_time</item>                    
                <item name="options" xsi:type="array">                             
                    <item name="controlType" xsi:type="string">select</item>
                    <item name="timeOnlyTitle" xsi:type="string">Select Start Time</item>                        
                    <item name="showsTime" xsi:type="boolean">true</item>                        
                    <item name="timeOnly" xsi:type="boolean">true</item>                                               
                </item>                    
            </item>
        </argument>
    </field>

ingrese la descripción de la imagen aquí

No recibo el tiempo que he seleccionado ui_form. Recibo la fecha en formato UTC por defecto en Magento. Quiero obtener solo el tiempo que he seleccionado ui_form.

Dhairya Shah
fuente

Respuestas:

3

Necesita "crear" su propio componente de interfaz de usuario.

Puede hacerlo extendiendo el Componente de IU de fecha.

# 1 Agregue el XML a su formulario

En este ejemplo, se llama al componente que crearemos time.

Tenga en cuenta que puede declarar un templateen el siguiente XML. Sin embargo, realmente no servirá de nada, ya que es la plantilla XHTML la que envolverá la plantilla Knockout que realiza el renderizado real. Hay otros nodos que puede declarar aquí como validación.

<field name="time_field">
    <argument name="data" xsi:type="array">
        <item name="config" xsi:type="array">
            <item name="label" xsi:type="string" translate="true">Time</item>
            <item name="dataType" xsi:type="string">text</item>
            <item name="formElement" xsi:type="string">date</item>
            <item name="dataScope" xsi:type="string">time_field</item>
            <item name="component" xsi:type="string">Your_Module/js/form/element/time</item>
        </item>
    </argument>
</field>

# 2 Crear el componente de la interfaz de usuario

// app/code/Your/Module/view/adminhtml/web/js/form/element/time.js

define([
    'Magento_Ui/js/form/element/date'
], function(Date) {
    'use strict';

    return Date.extend({
        defaults: {
            options: {
                showsDate: false,
                showsTime: true,
                timeOnly: true
            },

            elementTmpl: 'ui/form/element/date'
        }
    });
});

Algunas notas sobre el Javascript anterior:

elementTmplno es necesario. Sin embargo, si desea personalizar la plantilla (actualmente module-ui/view/base/web/templates/form/element/date.html), simplemente cree su propia plantilla y haga referencia a ella elementTmpl.

Ref: Magento 2 Mostrar selector de tiempo usando UiComponent no Datepicker

Aasim Goriya
fuente
Ya lo he intentado. No está trabajando.
Dhairya Shah
Sí, está funcionando para mí :) gracias por la solución.
1

Puedes probar el siguiente código.

<field name="start_time">
    <argument name="data" xsi:type="array">                
        <item name="config" xsi:type="array">                    
            <item name="dataType" xsi:type="string">text</item>
           <item name="label" xsi:type="string" translate="true">Start Time</item>
           <item name="formElement" xsi:type="string">date</item>
           <item name="source" xsi:type="string">prmrule</item>
           <item name="dataScope" xsi:type="string">start_time</item>                                                
           <item name="options" xsi:type="array">                             
               <item name="controlType" xsi:type="string">select</item>
               <item name="timeOnlyTitle" xsi:type="string">Select Start Time</item>                        
               <item name="showsTime" xsi:type="boolean">true</item>                        
               <item name="timeOnly" xsi:type="boolean">true</item>                                               
               <item name="dateFormat" xsi:type="string">yyyy-MM-dd</item>
               <item name="timeFormat" xsi:type="string">h:mm a</item>            
           </item>                    
        </item>
    </argument>
</field>

En su controlador, use la función strtotime .

public function execute()
{
   ----------------
   $data = $this->getRequest()->getPostValue();
   $dateTime = $data['start_time'];
   $start_time = date("H:i:s", strtotime($dateTime));
   ----------------
}
Pritam Info 24
fuente