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

afterSavePlat

Et ensuite ?

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