# Aide à la saisie à plusieurs sorties nommés
# Spécification de l'aide à la saisie avec des sorties nommées
Lorsque les sorties sont plus nombreuses ou lorsque l'aide à la saisie se veut plus paramétrable, le nommage des retours permet de définir des index spécifiques.
L'index de la valeur de retour est indiqué dans l'attribut
config/structure-configuration/autocompletion/field-autocomplete/field-returns/field-return/@name
. Au niveau de la
méthode donnant les résultats, les index sont utilisés dans les arguments de la méthode
SmartAutocompleteResponse::appendEntry()
.
<?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\NoteLocationComplete"/>
<smart:field-argument type="field" name="toto"/>
<smart:field-returns>
<!-- Ici les retours sont indexés avec l'attribut name-->
<smart:field-return name="cityName" field="my_location"/>
<smart:field-return name="country" field="my_country"/>
<smart:field-return name="continent" field="my_continent"/>
</smart:field-returns>
</smart:field-autocomplete>
</smart:autocompletion>
</smart:structure-configuration>
</smart:config>
# Traitement de l'aide à la saisie avec des sorties nommées
Fichier "vendor/Anakeen/SmartStructures/Mydestination/NoteLocationComplete.php" :
<?php
namespace Anakeen\SmartStructures\Mydestination;
use Anakeen\Core\Utils\Strings;
use Anakeen\SmartAutocompleteRequest;
use Anakeen\SmartAutocompleteResponse;
class NoteLocationComplete
{
public function __invoke(
SmartAutocompleteRequest $request,
SmartAutocompleteResponse $response
): SmartAutocompleteResponse {
$filter = $request->getFilterValue();
$cities = [
["continent" => "europa", "country" => "france", "town" => "Paris"],
["continent" => "europa", "country" => "italy", "town" => "Roma"],
["continent" => "asia", "country" => "chine", "town" => "Benjin"]
];
foreach ($cities as $city) {
if (!$filter || stripos($city["town"], $filter) !== false) {
// Label entry is an HTML fragment
$label = sprintf(
"<p>%s > <b>%s</b> / <i>%s</i>",
Strings::xmlEncode($city["town"]),
Strings::xmlEncode($city["continent"]),
Strings::xmlEncode($city["country"])
);
// les index sont utilisés dans le tableau de valeurs retournées.
$response->appendEntry($label, [
"cityName" => $city["town"],
"country" => $city["country"],
"continent" => $city["continent"]
]);
}
}
return $response;
}
}