Magento 2 Mostrar timepicker usando UiComponent

8

Quero mostrar o Timepicker no formulário de componente da interface do usuário . Consegui adicionar o campo de tempo usando o código abaixo, mas não foi possível economizar valor. Alguém pode ajudar nisso.

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

insira a descrição da imagem aqui

Não estou conseguindo o horário que selecionei ui_form. Estou recebendo data no formato UTC por padrão no Magento. Quero ter apenas o tempo que selecionei ui_form.

Dhairya Shah
fonte

Respostas:

3

Você precisa "criar" seu próprio componente de interface do usuário.

Você pode fazer isso estendendo o componente da interface do usuário da data.

# 1 Adicione o XML ao seu formulário

Neste exemplo, o componente que iremos criar é chamado time.

Observe que você pode declarar um templateno XML a seguir. No entanto, ele não será realmente bom, pois é o modelo XHTML que envolve o modelo Knockout que faz a renderização real. Existem outros nós que você pode declarar aqui como validação.

<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 Crie o componente da interface do usuário

// 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'
        }
    });
});

Algumas notas sobre o Javascript acima:

elementTmplnão é necessário. No entanto, se você deseja personalizar o modelo (atualmente module-ui/view/base/web/templates/form/element/date.html), basta criar seu próprio modelo e referenciá-lo elementTmpl.

Ref: Magento 2 Mostrar timepicker usando UiComponent não Datepicker

Aasim Goriya
fonte
já tentei. Não está funcionando.
Dhairya Shah
Sim, está funcionando para mim :) obrigado pela solução.
1

Você pode tentar o código abaixo.

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

No seu controlador, use a função strtotime .

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