Bonjour @leoonline et merci pour vos contributions @paul13 et @celine_1318.
@leoonline, vous êtes sur PrestaShop 1.7.8.8. La difficulté vient en effet du fait que PrestaShop, même si un champ est facultatif, peut toujours l'attendre ou le rendre conditionnellement requis. Pour masquer ces champs de manière propre et sécurisée dans themes/classic/templates/checkout/_partials/customer-form.tpl, vous devez utiliser des conditions Smarty qui vérifient non seulement si le champ est présent, mais aussi si sa configuration globale permet de le masquer ou s'il est explicitement requis.
Voici comment gérer la date de naissance, la civilité et les offres partenaires. Il faut entourer chaque bloc de champ par une condition :
Pour la date de naissance (assurez-vous d'abord que dans Paramètres de la boutique > Clients, l'option 'Demander la date de naissance' est sur Non) :
{if isset($customer_form.birthday) && Configuration::get('PS_CUSTOMER_BIRTHDATE') && !$customer_form.birthday.required}
<div class="form-group row">
<label class="col-md-3 form-control-label">{l s='Birthdate' d='Shop.Forms.Labels'}</label>
<div class="col-md-6">
<input class="form-control" name="customer_form[birthday]" type="text" value="{$customer_form.birthday.value}" placeholder="{l s='DD/MM/YYYY' d='Shop.Forms.Help'}" />
</div>
</div>
{/if}
Pour la civilité (M./Mme), le champ est souvent géré par la configuration PS_CUSTOMER_TITLE et peut être masqué si non requis :
{if isset($customer_form.id_gender) && Configuration::get('PS_CUSTOMER_TITLE') && !$customer_form.id_gender.required}
<div class="form-group row">
<label class="col-md-3 form-control-label">{l s='Social title' d='Shop.Forms.Labels'}</label>
<div class="col-md-6 form-control-valign">
{foreach from=$customer_form.id_gender.choices item=gender}
<label class="radio-inline">
<span class="custom-radio">
<input name="customer_form[id_gender]" type="radio" value="{$gender.id}" {if $customer_form.id_gender.value == $gender.id} checked="checked"{/if}>
<span></span>
</span>
Et pour les offres des partenaires, il suffit généralement de ne pas afficher la checkbox si elle n'est pas désirée, ou de vérifier la configuration PS_SHOW_SERVICE_OPTION:
{if isset($customer_form.opt_in) && Configuration::get('PS_SHOW_SERVICE_OPTION')}
<div class="form-group row">
<div class="col-md-9 offset-md-3">
<span class="custom-checkbox">
<input name="customer_form[opt_in]" type="checkbox" value="1" {if $customer_form.opt_in.value}checked="checked"{/if}>
<span><i class="material-icons checkbox-checked"></i></span>
<label>{l s='Receive offers from our partners' d='Shop.Theme.Customeraccount'}</label>
</span>
</div>
</div>
En utilisant ces conditions, vous vous assurez que le champ est masqué seulement si PrestaShop n'en a pas besoin pour la validation, ou si une option globale le désactive. Pensez à faire ces modifications dans un thème enfant pour ne pas perdre vos changements lors des mises à jour du thème Classic.