Bonjour @laetitiafr,
Le problème que tu décris est en effet très courant avec les modules PrestaShop 1.7, surtout pour la gestion des checkboxes. La fonction getContent() que tu as montrée est celle qui sert à afficher le formulaire, mais la logique de sauvegarde doit se trouver juste après la détection de la soumission du formulaire, généralement via Tools::isSubmit('submitMcgproTabHide').
Le souci avec foreach (array_keys($_POST)) est qu'il ne prend en compte que les champs présents dans la requête POST. Pour les checkboxes, si elles sont décochées, elles ne sont pas envoyées du tout. Il faut donc une logique pour explicitement définir à 0 (ou false) les options qui ne sont pas cochées.
Voici un exemple de snippet PHP pour corriger cette logique de sauvegarde, à intégrer dans ta méthode getContent() après la soumission du formulaire :
// ... votre code existant pour getContent()...
if (Tools::isSubmit('submitMcgproTabHide')) {
$tabsToManage = ['orders', 'addresses', 'vouchers']; // Exemple, à compléter avec vos vrais onglets
foreach ($tabsToManage as $tab) {
$configKey = 'MCGPRO_HIDE_TAB_' . Tools::strtoupper($tab);
Configuration::updateValue($configKey, (int)Tools::getValue($configKey, 0));
}
$this->displayConfirmation($this->l('Les paramètres de masquage ont été mis à jour avec succès.'));
}
// ... le reste de votre getContent()...
Ce code itère sur une liste prédéfinie de tes onglets (ou colonnes) et force la valeur à 0 si le champ n'est pas trouvé dans $_POST (grâce au second paramètre de Tools::getValue). Cela assure que les options décochées sont bien enregistrées comme désactivées.
Pour une gestion plus robuste et sans avoir à modifier directement le code du module à chaque mise à jour, un module pour customer grid – colonnes dédié est souvent une meilleure option pour la maintenabilité de votre boutique.