Comment cacher des Smart Fields dans les représentations de Smart Element ?

Prérequis

Afin de pouvoir suivre ce guide, il faut préalablement savoir Comment associer une classe de rendu à une smart structure.

Comment cacher des Smart Fields dans les représentations de Smart Element ?

Surchargeons la méthode getVisibilities de la classe de rendu des Consommables pour redéfinir la visibilité des Smart Fields:

  • Cacher le champ consommable_price_excl_vat en mode de consultation en utilsant la méthode sur la classe ConsommableViewRender
  • Visualiser le champ consommable_creator en mode d’édition en utilsant la méthode sur la classe ConsommableEditRender

Recommandations

Si vous n’êtes pas familier avec la fonction getVisibilities, il est recommandé de lire la documentation associée disponible ici












 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


<?php

namespace Cogip\Restauratec\SmartStructures\Consommable\Render;

use Anakeen\Core\Internal\SmartElement as InternalSmartElement;
use Anakeen\Ui\RenderAttributeVisibilities;
use SmartStructure\Fields\Consommable as ConsommableFields;

class ConsommableViewRender extends \Anakeen\Ui\DefaultConfigViewRender
{

    /**
     * @param InternalSmartElement $document
     * @param \SmartStructure\Mask|null $mask
     * @return RenderAttributeVisibilities
     * @throws \Anakeen\Ui\Exception
     */
    public function getVisibilities(
        \Anakeen\Core\Internal\SmartElement $document,
        \SmartStructure\Mask $mask = null
    ): RenderAttributeVisibilities {
        $visibilities = parent::getVisibilities($document, $mask);
        $visibilities ->setVisibility(
            ConsommableFields::consommable_price_excl_vat,
            RenderAttributeVisibilities::HiddenVisibility);
        return $visibilities;
    }
}

Il faut également modifier les classes de rendu de Boisson et Plat pour ajouter l’héritage à la classe de rendu Consommable :

src/vendor/Cogip/Restauratec/SmartStructures/Boisson/Render/BoissonViewRender.php :








 




<?php

namespace Cogip\Restauratec\SmartStructures\Boisson\Render;

use Cogip\Restauratec\SmartStructures\Consommable\Render\ConsommableViewRender;
use SmartStructure\Fields\Boisson as BoissonFields;

class BoissonViewRender extends ConsommableViewRender
{

}

src/vendor/Cogip/Restauratec/SmartStructures/Plat/Render/PlatViewRender.php :








 




<?php

namespace Cogip\Restauratec\SmartStructures\Plat\Render;

use Cogip\Restauratec\SmartStructures\Consommable\Render\ConsommableViewRender;
use SmartStructure\Fields\Plat as PlatFields;

class PlatViewRender extends ConsommableViewRender
{

}

ConsommableView


De même avec les classes de rendu en édition :

src/vendor/Cogip/Restauratec/SmartStructures/Consommable/Render/ConsommableEditRender.php :











 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 



<?php

namespace Cogip\Restauratec\SmartStructures\Consommable\Render;

use Anakeen\Core\Internal\SmartElement as InternalSmartElement;
use Anakeen\Ui\RenderAttributeVisibilities;
use SmartStructure\Fields\Consommable as ConsommableFields;

class ConsommableEditRender extends \Anakeen\Ui\DefaultConfigEditRender
{
    /**
     * @param InternalSmartElement $document
     * @param \SmartStructure\Mask|null $mask
     * @return RenderAttributeVisibilities
     * @throws \Anakeen\Ui\Exception
     */
    public function getVisibilities(
        \Anakeen\Core\Internal\SmartElement $document,
        \SmartStructure\Mask $mask = null
    ): RenderAttributeVisibilities {
        $visibilities = parent::getVisibilities($document, $mask);
        $visibilities ->setVisibility(
            ConsommableFields::consommable_creator,
            RenderAttributeVisibilities::StaticWriteVisibility);
        return $visibilities;
    }

}

src/vendor/Cogip/Restauratec/SmartStructures/Boisson/Render/BoissonEditRender.php :








 




<?php

namespace Cogip\Restauratec\SmartStructures\Boisson\Render;

use Cogip\Restauratec\SmartStructures\Consommable\Render\ConsommableEditRender;
use SmartStructure\Fields\Boisson as BoissonFields;

class BoissonEditRender extends ConsommableEditRender
{

}

src/vendor/Cogip/Restauratec/SmartStructures/Plat/Render/PlatEditRender.php :











 



































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

use Anakeen\Ui\CommonRenderOptions;
use Anakeen\Ui\EnumRenderOptions;
use Anakeen\Ui\FrameRenderOptions;
use Anakeen\Ui\RenderOptions;
use Cogip\Restauratec\SmartStructures\Consommable\Render\ConsommableEditRender;
use SmartStructure\Fields\Plat as PlatFields;

class PlatEditRender extends ConsommableEditRender
{
    public function getOptions(\Anakeen\Core\Internal\SmartElement $document): RenderOptions
    {
        $options = parent::getOptions($document);
        $options->enum(PlatFields::plat_type)->setDisplay(EnumRenderOptions::verticalDisplay);
        $options->commonOption()->setLabelPosition(CommonRenderOptions::upPosition);
        $options->frame(PlatFields::consommable_frame) ->setResponsiveColumns(
            array(
                [
                    "number" => 2,
                    "minWidth" => "60rem",
                    "maxWidth" => "100rem",
                    "direction" => FrameRenderOptions::topBottomDirection
                ],
                [
                    "number" => 3,
                    "minWidth" => "100rem",
                    "maxWidth" => "140rem",
                    "direction" => FrameRenderOptions::topBottomDirection],
                [
                    "number" => 4,
                    "minWidth" => "140rem",
                    "maxWidth" => "160rem",
                    "direction" => FrameRenderOptions::topBottomDirection],
                [
                    "number" => 5,
                    "minWidth" => "160rem",
                    "direction" => FrameRenderOptions::topBottomDirection],
            )
        );
        return $options;
    }
}

ConsommableEdit

Vous pouvez maintenant déployer vos modifications :

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

Et voir le résultat sur un consommable:

  • En mode consultation: http://localhost:8080/api/v2/smart-elements/{INITID_CONSOMMABLE}/views/!defaultEdition.html
  • En mode modification: http://localhost:8080/api/v2/smart-elements/{INITID_CONSOMMABLE}/views/!defaultConsultation.html

Et ensuite ?

Comment modifier le caractère obligatoire de certains Smart Fields dans les formulaires