# 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 &gt; <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;
  }
}