Comment ajouter un menu permettant d’accéder à une url spécifique?
Prérequis
Afin de pouvoir suivre ce guide, il faut préalablement savoir Comment associer une classe de rendu à une smart structure.
Objectif
On souhaite ajouter une image aux Smart Elements PLAT
et permettre de la visualiser à travers un menu.
Tout d’abord créons un nouveau champ de type image
dans nos plats :
src/vendor/Cogip/Restauratec/SmartStructures/Plat/100-PlatStructure.xml
:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<smart:config xmlns:smart="https://platform.anakeen.com/4/schemas/smart/1.0">
<smart:structure-configuration name="PLAT" label="Plat">
<smart:extends ref="CONSOMMABLE"/> <!-- La smart structure PLAT hérite de la smart structure CONSOMMABLE -->
<smart:icon file="plat.png"/>
<smart:class>Cogip\Restauratec\SmartStructures\Plat\PlatBehavior</smart:class>
<smart:fields reset="true">
<!-- extended="true" indique que l’on récupère ici la frame du parent (Consommable) à laquelle on ajoute d’autres Smart Fields -->
<smart:field-set name="consommable_frame" extended="true">
<smart:field-enum name="plat_type" label="Type de plat" relation="Plat_Type" access="Read" />
<smart:field-date name="plat_validity_date" label="Disponible jusqu’au" access="Read" />
<smart:field-text name="plat_abstract" label="Résumé" access="ReadWrite" />
<smart:field-date name="plat_creation_date" label="Date de création du plat" access="ReadWrite" />
<smart:field-image name="plat_image" label="Image du plat" access="ReadWrite"/>
</smart:field-set>
</smart:fields>
<smart:hooks />
<smart:defaults>
<smart:default field="plat_abstract">Entrez un résumé...</smart:default>
<smart:default field="plat_creation_date">
<smart:field-callable function="::getCreationDate"/>
</smart:default>
</smart:defaults>
</smart:structure-configuration>
</smart:config>
Comment créer un menu ?
Surchargeons la méthode getMenu
de la classe de rendu de consultation des plats PlatViewRender
pour définir un menu
d’un Smart Element Plat.
Recommandations
Si vous n’êtes pas familier avec la fonction getMenu
, il est recommandé de lire la documentation associée
disponible ici
On utilise la fonction setURL
pour définir l’URL d’un menu et la fonction setTarget
pour indiquer la cible d’un
menu.
Recommandations
Si vous n’êtes pas familier avec la fonction setURL
, il est recommandé de lire la documentation associée
disponible ici
Si vous n’êtes pas familier avec la fonction setTarget
, il est recommandé de lire la documentation associée
disponible ici
<?php
namespace Cogip\Restauratec\SmartStructures\Plat\Render;
use Anakeen\Core\Internal\SmartElement;
use Anakeen\Ui\BarMenu;
use Anakeen\Ui\ItemMenu;
use Anakeen\Ui\MenuTargetOptions;
use Cogip\Restauratec\SmartStructures\Consommable\Render\ConsommableViewRender;
use SmartStructure\Fields\Plat as PlatFields;
class PlatViewRender extends ConsommableViewRender
{
/**
* @param SmartElement $document
* @return BarMenu
* @throws \Anakeen\Core\DocManager\Exception
* @throws \Anakeen\Exception
* @throws \Anakeen\Database\Exception
* @throws \Anakeen\Search\Exception
*/
public function getMenu(SmartElement $document): BarMenu
{
$menu = parent::getMenu($document);
$imagePlat= $document ->getFileLink(PlatFields::plat_image);
if(!empty($imagePlat)){
$itemImage = new ItemMenu("platImage");
$url = sprintf("%s?inline=true&inline=yes",
$imagePlat
);
$itemImage->setUrl($url);
$option = new MenuTargetOptions();
$option->windowHeight = 400;
$option->windowWidth = 700;
$itemImage->setTarget("_dialog", $option);
$itemImage->setTextLabel("Afficher l’image");
$menu->appendElement($itemImage);
}
return $menu;
}
}
Astuce
Pensez à générer les stubs. Cela a pour but d’extraire les constantes des différents fichiers de configuration .xml
des SmartStructures que vous possédez. Cela apportera ici une complétion sur les Smart Fields, paramètres de Smart
Structure, étapes et transitions des cycles de vie, aussi bien dans le PHP que dans le JavaScript. Pour cela :
npx @anakeen/anakeen-cli generateStubs
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 consultation :
http://localhost:8080/api/v2/smart-elements/{INITID_PLAT}/views/!defaultConsultation.html
Et ensuite ?
Comment déclencher un code javascript lors de la sélection d’un menu spécifique ?