@Eolia Eurêka ! Je viens de trouver où était le problème de l'affichage des champs de personnalisation en Back Office, fiche produit.
Pour rappel, le bug était : quel que soit le nombre de champs de personnalisation pour ce produit en base de données, l'interface n'affichait jamais le dernier de la liste.
On 4/11/2023 at 12:16 PM, Sda33 said:J'avance un peu, je suis sur un produit avec 3 champs en BDD, 3 champs bien visibles en FO, seulement 2 visibles en BO.
Les champs ont les id 158, 159 et 160. Le 160 ne s'affiche pas en BO.
La requête getCustomizationFields de Product.php me renvoie bien les 3 champs (cf capture d'écran).
Mais la fonction _getCustomizationFieldIds($labels, $alreadyGenerated, $obj) ne me retourne que les deux premiers.
Voir capture d'écran, j'affiche le return implode('¤', $customizableFieldIds);
En remontant un peu (ligne 4249), je sais que j'ai un problème sur AdminProductsController dans la function _displayLabelFields(...)
Bien donc depuis je suis remontée sur la classe Product.php.
Le problème vient de la fonction getCustomizationFields(), et plus particulièrement du foreach en fin de fonction.
Pour un produit avec 4 champs de personnalisation texte (3 seulement s'affichaient) :
- Avant foreach, mon $result comprend bien 4 lignes, une pour chaque id
-
Dans le foreach, toujours 4 lignes, mais la dernière ligne était un duplicata de l'une des 3 autres, écrasant systématiquement les valeurs de la dernière donc.
- (premier passage du foreach, la 4è ligne de l'array est la copie de la première, deuxième passage c'est une copie de la 2è, etc)
- L'utilisation du "$row" comme nom de variable pour cette boucle est à l'origine du problème
La correction, j'ai renommé la variable, donc :
J'ai remplacé foreach ($result as $row)
Par foreach ($result as $myrow) (et bien entendu adapté la phrase du dessous)
J'espère que cela pourra aider ceux qui avaient le même problème que moi à cet endroit.