Comment modifier le caractère obligatoire de certains Smart Fields dans les formulaires ?
Prérequis
Afin de pouvoir suivre ce guide, il faut préalablement savoir Comment associer une classe de rendu à une smart structure.
Comment modifier le caractère obligatoire de certains Smart Fields dans les formulaires ?
Surchargeons la méthode getNeeded
de la classe de rendu d’édition des menus MenuEditRender
pour redéfinir le
caractère obligatoire des Smart Fields: menu_discount
et menu_plat
Recommandations
Si vous n’êtes pas familier avec la fonction getNeeded
, il est recommandé de lire la documentation associée
disponible ici
<?php
namespace Cogip\Restauratec\SmartStructures\Menu\Render;
use Anakeen\Core\Internal\SmartElement as InternalSmartElement;
use Anakeen\Ui\CommonRenderOptions;
use Anakeen\Ui\RenderAttributeNeeded;
use Anakeen\Ui\RenderOptions;
use SmartStructure\Fields\Menu as MenuFields;
use \Anakeen\Core\Internal\SmartElement;
use SmartStructure\Mask;
class MenuEditRender extends \Anakeen\Ui\DefaultConfigEditRender
{
public function getOptions(\Anakeen\Core\Internal\SmartElement $document): RenderOptions
{
$options = parent::getOptions($document);
//Mis en place des descriptions par la function setDescription
$options->frame(MenuFields::menu_frame)
->setDescription("<p>Une proposiion de repas pour client</p>",
CommonRenderOptions::topPosition);
$options->arrayAttribute(MenuFields::menu_composition)
->setDescription("<p>La liste des divers mets qui composent le repas</p>",
CommonRenderOptions::bottomPosition);
$options->arrayAttribute(MenuFields::menu_composition)
->setTemplate('
<table class="dcpArray__table"" rules="all" >
<thead>
<tr>
<th/>
<th class="dcpArray__head__cell" style="display: block; text-align: center">
{{attributes.menu_plat.label}} / {{attributes.menu_boisson.label}}
</th>
</tr>
</thead>
<tbody>
{{#attribute.rows}}
<tr>
{{#attribute.isWriteMode}}
<td>
{{{rowTools}}}
</td>
{{/attribute.isWriteMode}}
<td style="display: block; height: 100px">
<div style="margin: 5px">
{{{content.menu_plat.htmlContent}}}
</div>
<div style="margin: 5px">
{{{content.menu_boisson.htmlContent}}}
</div>
</td>
</tr>
{{/attribute.rows}}
</tbody>
</table>
<div>
{{#attribute.isWriteMode}}
{{{attribute.tableTools}}}
{{/attribute.isWriteMode}}
</div>
');
$options->text(MenuFields::menu_title)
->setDescription("<p>Le nom d’un menu</p>",
CommonRenderOptions::clickPosition);
//Mis en place des descriptions par le Smart Element Menu_discount_description_1
/** @var SmartElement $menuDescriptions */
$menuDescriptions = \Anakeen\Core\SEManager::getDocument("Menu_discount_description_3");
if ($menuDescriptions) {
$this->applyRenderDescription($menuDescriptions, $options);
}
return $options;
}
/**
* @param SmartElement $document
* @param \SmartStructure\Mask|null $mask
* @return RenderAttributeNeeded
* @throws \Anakeen\Ui\Exception
*/
public function getNeeded(\Anakeen\Core\Internal\SmartElement $document, \SmartStructure\Mask $mask = null): RenderAttributeNeeded
{
$neededAttributes = parent::getNeeded($document);
$neededAttributes->setNeeded(MenuFields::menu_discount,true);
$neededAttributes->setNeeded(MenuFields::menu_plat,true);
return $neededAttributes;
}
}
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 MENU en création ou modification :
http://localhost:8080/api/v2/smart-elements/MENU/views/!defaultCreation.html
Et ensuite ?
Comment avoir du style (dans la représentation d’un smartElement)