Vous devez "créer" * votre propre composant d'interface utilisateur. Vous pouvez le faire en étendant le composant d'interface utilisateur Date.
# 1 Ajoutez le XML à votre formulaire
Ajoutez le champ au jeu de champs. Dans cet exemple, le composant que nous allons créer est appelé time
. Notez que vous pouvez déclarer un template
dans le XML suivant. Cependant, cela ne fera vraiment aucun bien car c'est le modèle XHTML qui encapsulera le modèle Knockout qui fait le rendu réel. Il existe d'autres nœuds que vous pouvez déclarer ici comme la validation.
<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 Créez le composant UI
// 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'
}
});
});
Quelques notes sur le Javascript ci-dessus:
elementTmpl
n'est pas nécessaire. Cependant, si vous souhaitez personnaliser le modèle (actuellement module-ui/view/base/web/templates/form/element/date.html
), créez simplement votre propre modèle et référencez-le avec elementTmpl
.
Il y a plus d'options pour l'entrée. Vous pouvez en savoir plus à leur sujet: http://trentrichardson.com/examples/timepicker/#tp-options . Dans le code, il y a une liste de toutes les valeurs par défaut ici:/lib/web/jquery/jquery-ui-timepicker-addon.js
Résultat final:
- À ce stade, je ne pense pas qu'il soit possible de déclarer votre propre composant d'interface utilisateur d'une manière similaire à celle de
definitions.xml
. Cependant, vous pouvez les étendre avec un minimum d'effort. (Et, s'il y a un moyen, faites-le moi savoir).