Comment définir la valeur par défaut d’un Smart Field

Attention

La valeur par défaut est la valeur qui sera affectée à un Smart Field lors de la création d’un Smart Element.

Recommandation

Si vous n’êtes pas familier avec les valeurs par défaut de Smart Fields et leur fonctionnement, il est fortement recommandé de lire la documentation associée disponible ici

Prérequis

Afin de pouvoir suivre ce guide, il faut préalablement avoir créé une Smart Structure.

Comment procéder

Pour l’exemple, nous ajouterons deux Smart Fields techniques à la Smart Structure Plat.
Le fichier concerné est donc le suivant : src/vendor/<vendorName>/<moduleName>/SmartStructures/Plat/100-PlatStructure.xml.

Le premier Smart Field sera calculé avec une valeur fixe. le second sera calculé avec une valeur dynamique.

Valeur fixe

Ajoutons un champ de description du plat plat_description. Sa valeur initiale sera définie par une valeur fixe.



















 




 




<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0">
    <smart:enumerates>
        <smart:enum-configuration name="Plat_Type">
            <smart:enum name="ENTREE" label="Entrée" />
            <smart:enum name="PRINCIPAL" label="Plat principal" />
            <smart:enum name="DESSERT" label="Dessert" />
        </smart:enum-configuration>
    </smart:enumerates>
    <smart:structure-configuration name="PLAT" label="Plat">
        <smart:extends ref="CONSOMMABLE"/> <!-- La smart structure PLAT hérite de la smart structure CONSOMMABLE -->
        <smart:icon file="plat.png"/>
        <smart:class>Cogip\Restauratec\SmartStructures\Plat\PlatBehavior</smart:class>
        <smart:fields>
            <!-- extended="true" indique que l’on récupère ici la frame du parent (Consommable) à laquelle on ajoute d’autres Smart Fields -->
            <smart:field-set name="consommable_frame" extended="true">
                <smart:field-enum name="plat_type" label="Type de plat" relation="Plat_Type" access="ReadWrite" />
                <smart:field-date name="plat_validity_date" label="Disponible jusqu’au" access="ReadWrite" />
                <smart:field-text name="plat_abstract" label="Résumé" access="ReadWrite" />
            </smart:field-set>
        </smart:fields>
        <smart:hooks />
        <smart:defaults>
            <smart:default field="plat_abstract">Entrez un résumé...</smart:default>
        </smart:defaults>
    </smart:structure-configuration>
</smart:config>

Valeur dynamique

Ajoutons un champ de date de création du plat plat_creation_date. Sa valeur initiale sera définie par une valeur dynamique.




















 





 
 
 




<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0">
    <smart:enumerates>
        <smart:enum-configuration name="Plat_Type">
            <smart:enum name="ENTREE" label="Entrée" />
            <smart:enum name="PRINCIPAL" label="Plat principal" />
            <smart:enum name="DESSERT" label="Dessert" />
        </smart:enum-configuration>
    </smart:enumerates>
    <smart:structure-configuration name="PLAT" label="Plat">
        <smart:extends ref="CONSOMMABLE"/> <!-- La smart structure PLAT hérite de la smart structure CONSOMMABLE -->
        <smart:icon file="plat.png"/>
        <smart:class>Cogip\Restauratec\SmartStructures\Plat\PlatBehavior</smart:class>
        <smart:fields>
            <!-- extended="true" indique que l’on récupère ici la frame du parent (Consommable) à laquelle on ajoute d’autres Smart Fields -->
            <smart:field-set name="consommable_frame" extended="true">
                <smart:field-enum name="plat_type" label="Type de plat" relation="Plat_Type" access="ReadWrite" />
                <smart:field-date name="plat_validity_date" label="Disponible jusqu’au" access="ReadWrite" />
                <smart:field-text name="plat_abstract" label="Résumé" access="ReadWrite" />
                <smart:field-date name="plat_creation_date" label="Date de création du plat" access="ReadWrite" />
            </smart:field-set>
        </smart:fields>
        <smart:hooks />
        <smart:defaults>
            <smart:default field="plat_abstract">Entrez un résumé...</smart:default>
            <smart:default field="plat_creation_date">
                <smart:field-callable function="::getCreationDate"/>
            </smart:default>
        </smart:defaults>
    </smart:structure-configuration>
</smart:config>

La valeur par défaut du champ plat_creation_date fait appel à une fonction de la classe de comportement de la Smart Structure PLAT. Définissons la fonction getCreationDate dans src/vendor/<vendorName>/<moduleName>/SmartStructures/Plat/PlatBehavior.php :













 
 
 


<?php
namespace Cogip\Restauratec\SmartStructures\Plat;

use SmartStructure\Fields\Plat as PlatFields;

class PlatBehavior extends \SmartStructure\Consommable
{
    public function registerHooks()
    {
        parent::registerHooks();
    }

    public function getCreationDate() {
        return date("Y-m-d");
    }
}

Vérifier les valeurs par défaut

Attention

Pensez à effectuer une réinstallation afin que l’application prenne en compte les modifications effectuées :

npx @anakeen/anakeen-cli deploy -c http://localhost:8080/control -s . -u admin -p anakeen --reinstall

Rendons-nous sur un formulaire de création d’un plat : http://localhost:8080/api/v2/smart-elements/PLAT/views/!defaultCreation.html

Les Smart Field créés sont alors préremplis avec les valeurs par défaut :

Valeurs par défaut

Et ensuite ?

Comment calculer automatiquement la valeur d’un Smart Field ?