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 classeConsommableViewRender
- Visualiser le champ
consommable_creator
en mode d’édition en utilsant la méthode sur la classeConsommableEditRender
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
{
}
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;
}
}
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