Comment ajouter des messages en provenance du serveur lors d’une consultation ?

Prérequis

Afin de pouvoir suivre ce guide, il faut préalablement savoir Comment modifier l’aspect d’un Smart Field à l’aide d’une option de représentation.

Comment ajouter des messages en provenance du serveur lors d’une consultation ?

La méthode getMessages permet d’afficher des messages pour un Smart Element depuis le serveur.

Pour écrire un message variable, il est nécessaire de prendre en compte la valeur de ce message dans le calcul de l’etag afin de pouvoir observer la modification du message sur le navigateur. La méthode getEtag permet de modifier la valeur de l’etag pour la requête qui délivre les données du Smart Element.

Recommandations

Si vous n’êtes pas familier avec le concept de ETag, il est fortement recommandé de lire la documentation associée disponible ici

Si vous n’êtes pas familier avec les méthodes getMessages et getEtag, il est recommandé de lire les documentations associées disponibles ici et ici

Modifier le fichier MenuViewRender.php :




















 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 



<?php

namespace Cogip\Restauratec\SmartStructures\Menu\Render;

use Anakeen\Core\Internal\SmartElement;
use Anakeen\Routes\Core\Lib\ApiMessage;
use Anakeen\Ui\RenderOptions;
use SmartStructure\Fields\Menu as MenuFields;

class MenuViewRender extends \Anakeen\Ui\DefaultConfigViewRender
{
    public function getOptions(SmartElement $document): RenderOptions
    {
        $options = parent::getOptions($document);
        $options->text(MenuFields::menu_title)->setTemplate('<div class="restauratec-custom-menu-title" style="display:flex"><i class="fa fa-book" aria-hidden="true" style="margin-right:10px"></i>{{{attribute.htmlDefaultContent}}}</div>');
        $options->frame(MenuFields::menu_frame)->setTemplate('<div class="restauratec-custom-menu-frame" style="text-align: center">{{{attribute.htmlDefaultContent}}}</div>');
        return $options;
    }

    /**
     * @param SmartElement $document
     * @return string
     */
    public function getEtag(SmartElement $document): string
    {
        $eTag = parent::getEtag($document);
        $eTag .= serialize($this->getMessages($document));
        return $eTag;
    }


    /**
     * @param SmartElement $document
     * @return array
     */
    public function getMessages(\Anakeen\Core\Internal\SmartElement $document): array
    {
        $messages = parent::getMessages($document);
        $messages[] = new ApiMessage(
            sprintf("Time : %d", time()),
            ApiMessage::SUCCESS
        );
        return $messages;
    }
}

On met à jour ici la valeur par défaut de l’eTag en lui ajoutant une sérialisation des messages qui inclus un horodatage différent à chaque seconde : l’eTag sera donc différent à chaque appel de la fonction getMessages.

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 en comparant le nombre du message qui devrait changer à chaque rafraichissement d’un rendu de consultation d’un MENU :

essai2 essai1

Et ensuite ?

Comment ajouter un menu permettant d’accéder à une url spécifique ?