Comment rediriger vers une autre représentation après la sauvegarde ?
Prérequis
Afin de pouvoir suivre ce guide, il faut préalablement savoir Comment déclencher un code javascript lors de la sélection d’un menu spécifique ?.
Comment procéder ?
Dans notre exemple, nous allons faire basculer la vue d’édition vers la vue de consultation pour nos Smart Elements
PLAT. La méthode fetchSmartElement nous permettra de charger un Smart Element vers une vue spécifique.
Recommandations
Si vous n’êtes pas familier avec la méthode fetchSmartElement, il est recommandé de lire la documentation associée
disponible ici
Nous allons ajouter un script JavaScript à la vue de modification des PLAT. Créer le fichier src/public/platEdit.js
:
window.ank.smartElement.globalController.registerFunction("platEdit", (controller) => {
controller.addEventListener("ready", function addListeners(event, documentObject, data) {
controller.addEventListener("afterSave", function fetchConsultationView(
event,
currentSmartElement,
previousSmartElement
) {
controller.fetchSmartElement({
initid: currentSmartElement.initid,
viewId: "!defaultConsultation",
});
});
});
});
Ajouter ce script aux Smart Elements PLAT en modifiant
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::horizontalDisplay);
$options->commonOption()->setLabelPosition(CommonRenderOptions::leftPosition);
$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;
}
public function getJsReferences(\Anakeen\Core\Internal\SmartElement $document = null)
{
$jsRefs = parent::getJsReferences($document);
$jsRefs['platEdit'] = new \Anakeen\Ui\JsAssetReference("/platEdit.js");
return $jsRefs;
}
}
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 PLAT en création ou modification :
http://localhost:8080/api/v2/smart-elements/PLAT/views/!defaultCreation.html

Et ensuite ?
Comment préremplir des Smart Fields lors de l’affichage du formulaire ?