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