# Aide à la saisie à plusieurs sorties
# Déclaration de l'aide à la saisie avec plusieurs sorties
Cet exemple montre comment 3 champs sont complétés avec une seule sélection. Lorsque l'utilisateur choisi un pays les
champs my_continent
et my_country
sont aussi complétés. Chaque entrée enregistrée
(SmartAutocompleteResponse::appendEntry()
) contient les 2 valeurs pour compléter les 2 champs indiqués.
<?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="MY_DESTINATION" label="Destination">
<smart:fields>
<smart:field-set name="my_fr_ident" type="frame" access="ReadWrite" label="Identification">
<smart:field-text name="my_title" is-title="true" access="ReadWrite" label="Title"/>
<smart:field-text name="my_continent" access="ReadWrite" label="Continent"/>
<smart:field-text name="my_country" access="ReadWrite" label="Country"/>
<smart:field-text name="my_location" access="ReadWrite" label="City"/>
</smart:field-set>
</smart:fields>
<smart:autocompletion>
<smart:field-autocomplete field="my_location">
<smart:field-callable function="Anakeen\SmartStructures\Mydestination\NoteCountryComplete"/>
<smart:field-returns>
<smart:field-return field="my_country"/>
<smart:field-return field="my_continent"/>
</smart:field-returns>
</smart:field-autocomplete>
</smart:autocompletion>
</smart:structure-configuration>
</smart:config>
# Traitement de l'aide à la saisie avec plusieurs sorties
Fichier "vendor/Anakeen/SmartStructures/Mydestination/NoteCountryComplete.php" :
Attention
Si la méthode retourne moins d'éléments que spécifié (field-returns
) alors une exception sera levée
<?php
namespace Anakeen\SmartStructures\Mydestination;
use Anakeen\Core\Utils\Strings;
use Anakeen\SmartAutocompleteRequest;
use Anakeen\SmartAutocompleteResponse;
class NoteCountryComplete
{
public function __invoke(
SmartAutocompleteRequest $request,
SmartAutocompleteResponse $response
): SmartAutocompleteResponse {
$filter = $request->getFilterValue();
$countries = [
"france" => "europa",
"italy" => "europa",
"chine" => "china"
];
foreach ($countries as $country => $continent) {
if (!$filter || stripos($country, $filter) !== false) {
// Label entry is an HTML fragment
$label = sprintf("<p>%s > <b>%s</b>", Strings::xmlEncode($country), Strings::xmlEncode($continent));
// L'ordre des retours doit correspondre à l'ordre spécifié dans la balise "field-returns"
$response->appendEntry($label, [$country, $continent]);
}
}
return $response;
}
}