Jump to content

Sortie de la version 1.6.2.30 PhenixSuite - By @Eolia


Eolia

Recommended Posts

On 7/9/2023 at 9:25 PM, Eolia said:

PhenixSuite 1.6.2.13 est dispo ;) 

Bonjour Eolia

Merci pour le boulot que vous faites.

Sur la 1.6.2.13 je n'ai plus les meilleures ventes d'affichées !   Meme apres avoir enlevé puis remis les urls simplifiées.

J'ai fait le test en local deux fois de suite avec toujours le meme resultat, avant mise a jour j'ai bien les meilleures ventes et un fois upgradé l'affichage est vide ! (pas de meilleures ventes a afficher)

Bonne journée

Link to comment
Share on other sites

Il y a 1 heure, docmusicstation a dit :

Bonjour Eolia

Merci pour le boulot que vous faites.

Sur la 1.6.2.13 je n'ai plus les meilleures ventes d'affichées !   Meme apres avoir enlevé puis remis les urls simplifiées.

J'ai fait le test en local deux fois de suite avec toujours le meme resultat, avant mise a jour j'ai bien les meilleures ventes et un fois upgradé l'affichage est vide ! (pas de meilleures ventes a afficher)

Bonne journée

Avez-vous vidé le cache Prestashop ?

Link to comment
Share on other sites

7 hours ago, Eolia said:

Avez-vous vidé le cache Prestashop ?

Je viens de le faire manuellement cela ne changeait rien, il m'a fallu Aller dans la module nettoyage prestashop et nettoyer les contraintes d'integrité et nettoyage BDD.

Le probleme reviens de suite ...

Merci Eolia pour votre aide

Edited by docmusicstation (see edit history)
Link to comment
Share on other sites

On 7/9/2023 at 9:25 PM, Eolia said:

PhenixSuite 1.6.2.13 est dispo ;) 

Je confirme que l'installation s'est finalisée correctement sous WAMP :)

Suis en train de tester cette version merci !
PI sauf erreur de ma part le blocksearch rechercher ne fonctionne pas. J'ai cette erreur en console :
2023-07-12_15h10_51.thumb.jpg.a651dd4053c25431668a77cb9d101bfc.jpg

Link to comment
Share on other sites

Il y a 21 heures, docmusicstation a dit :

Je viens de le faire manuellement cela ne changeait rien, il m'a fallu Aller dans la module nettoyage prestashop et nettoyer les contraintes d'integrité et nettoyage BDD.

Le probleme reviens de suite ...

Merci Eolia pour votre aide

Effectivement, il y a un bug dans la classe ProductSale.php

A remplacer par celui fourni dans le zip joint.

ProductSale.zip

Link to comment
Share on other sites

il y a 25 minutes, Asu34 a dit :

Je confirme que l'installation s'est finalisée correctement sous WAMP :)

Suis en train de tester cette version merci !
PI sauf erreur de ma part le blocksearch rechercher ne fonctionne pas. J'ai cette erreur en console :
2023-07-12_15h10_51.thumb.jpg.a651dd4053c25431668a77cb9d101bfc.jpg

Vous n'avez rien modifié dans le module blocksearch ? de base j'ai ça:

image.thumb.png.1b58160cb9d93ccfc3dea7d6645e0526.png

Link to comment
Share on other sites

la variable displayImage est affectée dans le frontControler :

Media::addJsDefL('displayimage', (bool)Configuration::get('PS_SEARCH_IMAGE'));

Donc doit être définie à true ou false.

Avez-vous bien ces réglages dans Performances ?

image.png.274f993b6220f773199fe57f3c783a74.png

Link to comment
Share on other sites

Bizarre, le rendu est effectivement plus sympa chez vous :) et oui pour les réglages dans performance qui par défaut sont déjà ainsi.

Oui également avec une installation fraîche de la 1.6.2.13 (prise sur votre site) sans aucune modification...

Peux être mon wamp encore ?

Link to comment
Share on other sites

On 7/11/2023 at 5:45 PM, docmusicstation said:

Je viens de le faire manuellement cela ne changeait rien, il m'a fallu Aller dans la module nettoyage prestashop et nettoyer les contraintes d'integrité et nettoyage BDD.

Le probleme reviens de suite ...

Merci Eolia pour votre aide

bonsoir,

j'ai eu à peu près même soucis que vous lors de la mise à jour 13

essayer

  1. en remplaçant fichier joint par eolia
  2. reconstruir l'index (preference recherche)
  3. reconstruir tous les prix etc( dans module navigation facette)
  4. réinitialiser module meilleurs vente
  5. et là ça refonctionne chez moi les articles meilleurs ventes affichent bien
  • Like 1
Link to comment
Share on other sites

il y a 2 minutes, Khundo2023 a dit :

bonsoir,

j'ai eu à peu près même soucis que vous lors de la mise à jour 13

essayer

  1. en remplaçant fichier joint par eolia
  2. reconstruir l'index (preference recherche)
  3. reconstruir tous les prix etc( dans module navigation facette)
  4. réinitialiser module meilleurs vente
  5. et là ça refonctionne chez moi les articles meilleurs ventes affichent bien

Après avoir remplacé le fichier il suffit de vider le cache ;)

  • Like 1
Link to comment
Share on other sites

Il y a 18 heures, Asu34 a dit :

PI : dans commande / états avec envoi mail on ne peut pas choisir de modèle. Il n'en propose aucun et quant on clique également sur visualiser il ne se passe donc rien.

2023-07-12_16h14_02.thumb.jpg.0f4d565390148e1a3bfb162f9962d2a7.jpg

Ok mais je ne vais pas ré-écrire tout Phenix pour votre Windows...

Pour ce cas précis, il faut remplacer la fonction d'origine de AdminStatuses Controller.php par celle-ci:

    protected function getTemplates()
    {
        $array = array();
        foreach (Language::getLanguages(false) as $language) {
            $iso_code = $language['iso_code'];
            $directory = _PS_THEME_DIR_.'mails/'.$iso_code.'/*\.html';
            if(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
                $directory = _PS_THEME_DIR_.'mails\\'.$iso_code.'\\*.html';
            }
            $theme_paths = glob($directory);
            $array[$iso_code][] = array(
                            'id' => '',
                            'name' => $this->l('Please select a template'),
                            'folder' => ''
                    );
            foreach($theme_paths as $path) {
                if(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
                    $template = str_replace(_PS_THEME_DIR_.'mails\\'.$iso_code.'\\', '', $path);
                }
                else {
                    $template = str_replace(_PS_THEME_DIR_.'mails/'.$iso_code.'/', '', $path);
                }
                $array[$iso_code][$template] = array(
                                'id' => substr($template, 0, -5),
                                'name' => substr($template, 0, -5),
                                'folder' => _THEME_DIR_.'mails/');
            }
            $directory = _PS_MAIL_DIR_.'mails/'.$iso_code.'/*\.html';
            if(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
                $directory = _PS_MAIL_DIR_.'mails\\'.$iso_code.'\\*.html';
            }
            $templates = glob($directory);
            foreach($templates as $path) {
                if(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
                    $template = str_replace(_PS_MAIL_DIR_.'mails\\'.$iso_code.'\\', '', $path);
                }
                else {
                    $template = str_replace(_PS_MAIL_DIR_.'mails/'.$iso_code.'/', '', $path);
                }
                if(!isset($array[$template]))
                    $array[$iso_code][$template] = array(
                                'id' => substr($template, 0, -5),
                                'name' => substr($template, 0, -5),
                                'folder' => _THEME_DIR_.'mails/');
            }
        }
        return $array;
    }

Parce que sous Linux, les séparateurs de fichiers c'est / et sous Windows c'est \

Edited by Eolia (see edit history)
Link to comment
Share on other sites

11 hours ago, Eolia said:

Ok mais je ne vais pas ré-écrire tout Phenix pour votre Windows...

Pour ce cas précis, il faut remplacer la fonction d'origine de AdminStatuses Controller.php par celle-ci:

    protected function getTemplates()
    {
        $array = array();
        foreach (Language::getLanguages(false) as $language) {
            $iso_code = $language['iso_code'];
            $directory = _PS_THEME_DIR_.'mails/'.$iso_code.'/*\.html';
            if(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
                $directory = _PS_THEME_DIR_.'mails\\'.$iso_code.'\\*.html';
            }
            $theme_paths = glob($directory);
            $array[$iso_code][] = array(
                            'id' => '',
                            'name' => $this->l('Please select a template'),
                            'folder' => ''
                    );
            foreach($theme_paths as $path) {
                if(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
                    $template = str_replace(_PS_THEME_DIR_.'mails\\'.$iso_code.'\\', '', $path);
                }
                else {
                    $template = str_replace(_PS_THEME_DIR_.'mails/'.$iso_code.'/', '', $path);
                }
                $array[$iso_code][$template] = array(
                                'id' => substr($template, 0, -5),
                                'name' => substr($template, 0, -5),
                                'folder' => _THEME_DIR_.'mails/');
            }
            $directory = _PS_MAIL_DIR_.'mails/'.$iso_code.'/*\.html';
            if(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
                $directory = _PS_MAIL_DIR_.'mails\\'.$iso_code.'\\*.html';
            }
            $templates = glob($directory);
            foreach($templates as $path) {
                if(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
                    $template = str_replace(_PS_MAIL_DIR_.'mails\\'.$iso_code.'\\', '', $path);
                }
                else {
                    $template = str_replace(_PS_MAIL_DIR_.'mails/'.$iso_code.'/', '', $path);
                }
                if(!isset($array[$template]))
                    $array[$iso_code][$template] = array(
                                'id' => substr($template, 0, -5),
                                'name' => substr($template, 0, -5),
                                'folder' => _THEME_DIR_.'mails/');
            }
        }
        return $array;
    }

Parce que sous Linux, les séparateurs de fichiers c'est / et sous Windows c'est /

Bonjour, et merci encore effectivement ça fonctionne sous mon windows ^^.

Link to comment
Share on other sites

Bonsoir Eolia,

J'ai un soucis au niveau des vidéo avec le module manage vidéo opart (fonctionne très bien sous prestashop 1.6.1.24)

Sous phenix v12 v13, : Aune erreur, Tout semble fonctionne bien avec les produits existants, videos affichent bien 

Mais si je veux inserrer dans ancienne ou un nouvelle video dans un nouveau produit, puis enregistrer ça ne veut pas enregistrer, donc pas video sur les nouveaux produits.

Pouvez-vous jeter un oeil sur mon sitetest.com et me corriger cela si possible svp ?

PS : il ne faut pas réinitialiser le module car je risque de perdre +500 vidéos indexés...

Merci par avance

 

Link to comment
Share on other sites

Bonjour Eolia,

Merci pour cette nouvelle version.

Je suis reparti de une sauvegarde de mon Ps1.6.1.30 et j'ai fait la mise à jour vers la 1.6.2.13

Aucun soucis lors de la mise à jour.

J'ai activé "Afficher les images produits dans la recherche Ajax", vidé le cache, mais je n'ai pas d'images.
J'ai essayé avec les différents formats proposés, mais rien n'y change.

aa10.jpg

 

Autre truc bizarre, au delà de 4 caractères tapés dans le champs de recherche, les images de produits ne s'affichent pas.

bb10.jpg

 

Je suppose que c'est lié à mon thème, mais as-tu une idée où chercher svp ?

Merci d'avance.
Pilou

Link to comment
Share on other sites

Il y a 8 heures, P i l o u a dit :

Bonjour Eolia,

Merci pour cette nouvelle version.

Je suis reparti de une sauvegarde de mon Ps1.6.1.30 et j'ai fait la mise à jour vers la 1.6.2.13

Aucun soucis lors de la mise à jour.

J'ai activé "Afficher les images produits dans la recherche Ajax", vidé le cache, mais je n'ai pas d'images.
J'ai essayé avec les différents formats proposés, mais rien n'y change.

aa10.jpg

 

Autre truc bizarre, au delà de 4 caractères tapés dans le champs de recherche, les images de produits ne s'affichent pas.

bb10.jpg

 

Je suppose que c'est lié à mon thème, mais as-tu une idée où chercher svp ?

Merci d'avance.
Pilou

Url de votre site svp ?

 

Link to comment
Share on other sites

Il y a 19 heures, Khundo2023 a dit :

Bonsoir Eolia,

J'ai un soucis au niveau des vidéo avec le module manage vidéo opart (fonctionne très bien sous prestashop 1.6.1.24)

Sous phenix v12 v13, : Aune erreur, Tout semble fonctionne bien avec les produits existants, videos affichent bien 

Mais si je veux inserrer dans ancienne ou un nouvelle video dans un nouveau produit, puis enregistrer ça ne veut pas enregistrer, donc pas video sur les nouveaux produits.

Pouvez-vous jeter un oeil sur mon sitetest.com et me corriger cela si possible svp ?

PS : il ne faut pas réinitialiser le module car je risque de perdre +500 vidéos indexés...

Merci par avance

 

J'ai ajouté un contrôle dans tinymce mais votre module date un peu (2013^^)

Link to comment
Share on other sites

4 hours ago, Eolia said:

J'ai ajouté un contrôle dans tinymce mais votre module date un peu (2013^^)

Rebonsoir Eolia,

Je viens de retélécharger sur opart store en espérant la version est plus recent

l'instalation s'est bien déroulé sans erreurs, 

lorsque je clique sur le bouton "video" il y a erreur 500

Fatal error: Uncaught Error: Call to undefined method Context::getTranslator() in /home/xxx/xxx/modules/opartproductvideo/controllers/admin/AdminOpartproductvideoController.php:64 Stack trace: #0 /home/xxx/xxx/modules/opartproductvideo/controllers/admin/AdminOpartproductvideoController.php(13): AdminOpartproductvideoController->l('Delete selected...')

#1 /home/xxx/xxx/classes/controller/Controller.php(144): AdminOpartproductvideoController->__construct(false, false) #2 /home/xxx/xxx/classes/Dispatcher.php(395): ControllerCore::getController('AdminOpartprodu...')

#3 /home/xxx/xxxx/xxxx/index.php(79): DispatcherCore->dispatch() #4 {main} thrown in /home/xxxx/xxx/modules/opartproductvideo/controllers/admin/AdminOpartproductvideoController.php on line 64

Il y a t-il moyen de corriger cela svp?

Merci par avance

Link to comment
Share on other sites

Il y a 12 heures, Khundo2023 a dit :

Bonsoir Eolia,

Mince alors, je ne pourrais plus utiliser ce module? C'était pratique 

Merci pour le retour, 

Bonne soirée à vous

Ben si, justement, j'ai adapté tinymce en conséquence et j'ai téléchargé une vidéo^^

Link to comment
Share on other sites

1 hour ago, Eolia said:

Ben si, justement, j'ai adapté tinymce en conséquence et j'ai téléchargé une vidéo^^

Bonjour Eolia,

Peut-être j'ai mal expliqué et mal compris..

J'utilise tjs depuis des années sous ps 1.6 le module opart manages vidéos pour insserer les videos de youtubes etc dans les articles des produits désirés et ça apparait dans l'onglet video du produit ciblé

Sur phenix je viens de rendre compte que avec le module manages vidéos, je ne peux plus ajouter une video youtube etc sur un  nouveau article que je viens de créer...  

Je souhaite rajouter une vidéo via manages  videos dans un article et non téléchargé une video

 managesvideos.JPG.9c9ba27ba0c1d1c094132a75f4fe66c0.JPG

J'ai un article test video sur mon sitetest.com 

Pouvez-vous rajouter une video exemple avec le module manages videos dans l'article nommé test video ?

Je n'ai pas réussi à rajouter :(

Et là j'ai plein d'erreurs cités au dessus...

Merci par avance Eolia

 

 

 

 

Edited by Khundo2023 (see edit history)
Link to comment
Share on other sites

10 minutes ago, Eolia said:

Je vous ai ajouté un lien dans manage video mais la nouvelle version que vous avez chargée est pour les Prestashop 1.7.

remettez l'ancienne version svp.

Voilà j'ai remis l'ancien version

merci beaucoup Eolia

Link to comment
Share on other sites

Au secours Eolia,

c'est le bordel mes videos ne s'affichent plus dans l'onglet video comme ceci :(

maintenant toutes mes videos s'affichent en bas de page de l'onglet "En savoir plus"

ce n'est pas ce que je souhaite.

Normalement lorsque j'ajoute une video, je peux ajouter sur plusieur article et affiche que dans l'onglet video

là je n'ai pas reussi... sous phenix 7 ça passe bien mais le 12 et v13 je n'arrive pas

pouvez-vous m'aider svp

merci par avance

ancien_produit.png.d22f46f02360e029debc60e1423ab88b.png

Link to comment
Share on other sites

8 minutes ago, Eolia said:

C'est réparé mais je ne vais pas continuer à intervenir à chaque fois.

En installant la dernière version du module vous l'avez décroché du hook productTab, je vous l'ai donc réaccroché.

Mille fois merci 

excusez du dérangement encore

Bonne soirée à vous

Link to comment
Share on other sites

23 hours ago, Eolia said:

1.6.2.14:

image.png.fe887d64812c8e0635ada8c61fdfe4c6.png

Bonsoir Eolia, 

Pour la version 14

Auriez vous la possibilité de rajouter un champ video simplifier dans l'éditeur des articles,  juste à  inserrer liens video youtube etc et qui s'implante directement dans l'onglet nommé vidéo ?

Merci par avance

 

Link to comment
Share on other sites

Bonsoir @Eolia,

En 1.6.2.12, j'ai un problème que je n'avais pas vu avec les modes de livraison, dans le process de commande.

Pour tous les modes de livraison le système prend la valeur du champ "delay" du premier mode de livraison affiché.

Je ne comprends pas d'où ça peut venir, et ça pose un vrai problème de compréhension pour les clients, entre la livraison en boîte aux lettres, en relais ou en click and collect... on voit à chaque fois le texte "delay" correspondant au premier affiché (livraison en 2 jours en boîte aux lettres).

La requête de la classe carrier a l'air correcte... C'est un vrai mystère.

Savez-vous ce que je dois corriger pour régler cela ?

Merci.

Link to comment
Share on other sites

C'est un bug natif dans tous les thèmes.

Il faut mettre déplacer le délai et le mettre dans la boucle foreach (de order-carrier.tpl et order-carrier-opc-advanced.tpl):

{if $option.unique_carrier}
	{foreach $option.carrier_list as $carrier}
		<strong>{$carrier.instance->name|escape:'htmlall':'UTF-8'}</strong>
		{if isset($carrier.instance->delay[$cookie->id_lang])}
			<br />{l s='Delivery time:'}&nbsp;{$carrier.instance->delay[$cookie->id_lang]|escape:'UTF-8'}
		{/if}
	{/foreach}
{/if}

 

  • Like 1
Link to comment
Share on other sites

9 hours ago, Eolia said:

Il faut mettre déplacer le délai et le mettre dans la boucle foreach (de order-carrier.tpl et order-carrier-opc-advanced.tpl)

Merci pour votre réponse si rapide, la réponse était sous mes yeux... Vu le code en effet c'est curieux que je n'ai pas eu le problème en 1.6.1.24... on n'entrait peut-être pas dans cette partie du code.

Je laisse ma question au cas où elle puisse servir à d'autres que moi.

Bonne journée.

Link to comment
Share on other sites

(re) Pour un warning sur l'administration, Gestionnaire SQL.

Failed opening 'xxx/tools/parser_sql/z.php' for inclusion (include_path='xxx/tools/htmlpurifier/standalone:.:/usr/local/php7.1/lib/php') 
in xxx/controllers/admin/AdminRequestSqlController.php on line 88

Effectivement la ligne 88 du controller cherche include(_PS_TOOL_DIR_.'parser_sql/z.php');

Or ce fichier n'existe pas.

A quoi cela correspond-il ?

Merci !

 

2 hours ago, Eolia said:

Vous n'y aviez pas fait attention mais ce bug est là depuis le 1er thème default-bootstrap

Oui oui je n'en doute pas, c'est juste que je n'avais pas de problème d'affichage, mes "delay" étaient correctement affichés en face de chaque mode de livraison sur la page de sélection, et encore en 1.6.2.7 (ou .6?) quand j'ai upgradé mon site vers Phénix pour la première fois tout était en place. Il y a une boucle au-dessus {foreach $option_list as $key => $option} qui suffisait vraisemblablement.
Mais pas de problème tout est ok maintenant avec la correction.

Link to comment
Share on other sites

RESTRICTION.JPG.fa8380fd8fe3c03e21ef8598e5751ea6.JPG

Bonsoir Eolia, 

Juste une question dans rubrique groupe clients et  l'option : Activer restriction produits

lorsque je prends un produits et dans rubrique association je désactive un des groupes exemple "visiteurs"

ils ne voient plus le produit.

ma question : est ce qu'il y aurait-il un moyen avec Phenixsuite que les visiteurs ou le groupe restictiion désectionner  puissent quand même voir le produit mais sans prix ?

Merci par avance

Link to comment
Share on other sites

Il y a 11 heures, Khundo2023 a dit :

RESTRICTION.JPG.fa8380fd8fe3c03e21ef8598e5751ea6.JPG

Bonsoir Eolia, 

Juste une question dans rubrique groupe clients et  l'option : Activer restriction produits

lorsque je prends un produits et dans rubrique association je désactive un des groupes exemple "visiteurs"

ils ne voient plus le produit.

ma question : est ce qu'il y aurait-il un moyen avec Phenixsuite que les visiteurs ou le groupe restictiion désectionner  puissent quand même voir le produit mais sans prix ?

Merci par avance

Non, pour ce genre de spécificité particulière il faudra passer par un module.

PhenixSuite n'est pas un fourre-tout, les options restent générales.

  • Like 1
Link to comment
Share on other sites

3 hours ago, Eolia said:

Non, pour ce genre de spécificité particulière il faudra passer par un module.

PhenixSuite n'est pas un fourre-tout, les options restent générales.

Bonjour Eollia,

Merci pour la réponse

Bonne journée à vous et à tous

Link to comment
Share on other sites

Le 15/07/2023 à 12:38 PM, Eolia a dit :

Bon, j'arrive à le faire fonctionner mais en désactivant ce module qui a des erreurs js image.png.8a90f5d07adcd472fb2392cf1cc8d8f4.png

et en supprimant le blocksearch.js de votre thème.

Bon, ben, il va falloir que je teste sa compatibilité avec Phenix Suite.

Link to comment
Share on other sites

Bonjour Eolia et encore merci pour tout ce travail colossal.

J'ai ce warning qui revient non stop :

Creating default object from empty value in /--path--/cache/smarty/compile/9f/1b/94/9f1b94ce5e9e706cd4529214dc55e8c193d06e0f_0.file.blockcart.tpl.php on line 261

Je ne sais pas où chercher, je suppose que l'erreur vient du fichier blockcart.tpl à la base ?
 

Capture d’écran 2023-07-19 à 16.56.57.png

Edited by Fab20620 (see edit history)
Link to comment
Share on other sites

Bonjour, 

Je rencontre un problème avec les caractéristiques des produits : j'ai remarqué que parfois elles "sautent".

C'est à dire que des valeurs caractéristiques créées, et associées à des produits, disparaissent totalement à la fois de la fiche produit, et des valeurs de caractéristiques en base de données. Je travaille mon catalogue, et quand je reviens sur un article pouf il a perdu deux valeurs de caractéristiques, et elles n'existent même plus du tout, je dois les recréer.

Je ne sais pas ce qui produit cela et je n'arrive donc pas à identifier où regarder le code pour comprendre.

En base de données j'ai la surprise de voir que pour 30 lignes de valeurs seulement (table feature_value) mes id_feature_value s'étendent de 34 à 791... Et j'ai bien une ligne pour chaque dans feature_value_lang également.

Avez-vous déjà noté ce problème et savez-vous ce que je dois corriger pour le résoudre ?

Question subsidiaire, à quoi sert la colonne "custom" dans cette table ? Elle a les valeurs 0, 1 ou NULL.

Merci.

Link to comment
Share on other sites

Une petite explication s'impose^^.

Prestashop avait la possibilité de créer des valeurs de caractéristiques soit depuis Catalogue => Caractéristiques, soit d'en ajouter directement depuis la fiche produit en tant que "custom"

Problème souvent rencontré, le ou la client(e) a rentré 10 ou 20 ou 50 fois la même custom parce que Prestashop ne les propose jamais dans la liste, donc elles sont recrées et associées par produit.

Dans Phenix, si vous utilisez cette possibilité depuis le fiche produit, on recherche si cette valeur n'existe pas et si ce n'est pas le cas, on la crée et on l'ajoute au choix des valeurs existantes.

Votre cas peut se présenter si vous aviez déjà plein de custom et dans ce cas il faut faire un nettoyage.

- Récupérer les valeurs identiques dans ps_feature_value_lang et noter leurs id.

- Les supprimer toutes sauf la 1ère dans ps_feature_value et ps_feature_value_lang

- Allez dans ps_feature_product et remplacez les id supprimés par celui que vous avez conservé.

 

Exemple, dans ps_feature_value_lang vous avez :

image.png.d57b6af6b259d977a49e5a96a2c5df2d.png

donc 2 valeurs identiques.

Vous conservez la 1ère et supprimez la seconde en notant son id (ici: 35252012)

Avec cette requête vous la supprimez dans ps_feature_value:

DELETE FROM `ps_feature_value` WHERE `id_feature_value` IN('35252012');

Et vous mettez à jour la table ps_feature_product:

UPDATE `ps_feature_product` SET `id_feature_value` = '35246900' WHERE `id_feature_value` IN('35252012');

Dans mon cas cela a mis à jour 21 produits.

PS: J'ai utilisé IN() volontairement si vous aviez plusieurs id à mettre, entourés chacun de simple quote '

Link to comment
Share on other sites

Il y a 1 heure, Fab20620 a dit :

Bonjour Eolia et encore merci pour tout ce travail colossal.

J'ai ce warning qui revient non stop :

Creating default object from empty value in /--path--/cache/smarty/compile/9f/1b/94/9f1b94ce5e9e706cd4529214dc55e8c193d06e0f_0.file.blockcart.tpl.php on line 261

Je ne sais pas où chercher, je suppose que l'erreur vient du fichier blockcart.tpl à la base ?
 

Capture d’écran 2023-07-19 à 16.56.57.png

Le nom du tpl concerné est indiqué en haut de ce fichier compilé ;) 

A priori c'est le blockcart-json.tpl dans votre thème.

La ligne correcte est celle-ci normalement:

"free_ship": {(!$shipping_cost_float && !count($cart->getDeliveryAddressesWithoutCarriers(true)))|json_encode},

Regardez le tpl du thème par défaut au cas où.

Link to comment
Share on other sites

28 minutes ago, Eolia said:

Dans Phenix, si vous utilisez cette possibilité depuis le fiche produit, on recherche si cette valeur n'existe pas et si ce n'est pas le cas, on la crée et on l'ajoute au choix des valeurs existantes.

Merci pour votre réponse @Eolia, et c'est justement cette fonctionnalité qui m'intéressait. Mais je ne suis pas dans le cas qui justifie des suppressions aléatoires de mes données, et je ne comprends pas.

Je suis en création d'une nouvelle boutique, donc je n'ai que très peu de données (8 caractéristiques, chacune avec 4 à 6 valeurs normalement). C'est vraiment peu, et je sais que je n'ai pas pu entrer de doublon.

Imaginons une caractéristique "dimension". Sur un produit je vais créer la dimension "carré 75 x 75cm". Sur un autre, "rond diamètre 75cm". Je suis contente de retrouver ces caractéristiques disponibles pour d'autres produits, mais je n'en ai pas encore besoin.

Je fais d'autres actions du même type, sur d'autres produits, avec d'autres caractéristiques.

Et je reviens sur mon premier produit, je réalise que la caractéristique "carré 75 x 75cm" a disparu, et du produit, et même de la caractéristique "taille". Pourtant je ne me suis plus intéressée à cette valeur, puisque je n'ai entré que des produits différents (une demi douzaine de produits, donc vraiment très peu).

Il y a donc un moment où les valeurs sont supprimées de manière totalement inopinée...

Sauriez-vous me dire où cela se passe que je puisse regarder quelles conditions génèrent le problème ?

 

Link to comment
Share on other sites

Ca se passe dans AdminProductController.php mais jamais le code ne supprime de caractéristique.

                if(preg_match('/^custom_([0-9]+)_('.$this->context->language->id.')/i', $key, $match)) {
                    if($default_value = $this->checkFeatures($languages, $match[1])) {
                        if($id_feature_value = $product->getFeatureValue($match[1], $default_value, $this->context->language->id)) {
                            // If this feature value already exists, just associate it to the product
                            $product->addFeaturesToDB($match[1], $id_feature_value);
                        }
                        else {
                            // else create it and associate it to the product
                            if($id_value = $product->addFeaturesToDB($match[1], 0, 1)) {
                                foreach($languages as $language) {
                                    if($cust = Tools::getValue('custom_'.$match[1].'_'.(int)$language['id_lang'])) {
                                        $product->addFeaturesCustomToDB($id_value, (int)$language['id_lang'], $cust);
                                    }
                                    else {
                                        $product->addFeaturesCustomToDB($id_value, (int)$language['id_lang'], $default_value);
                                    }
                                }
                            }
                        }
                    }
                }

Vous n'auriez pas un module ou autre chose qui interviendrait sur les caractéristiques ?

Link to comment
Share on other sites

12 hours ago, Eolia said:

Vous n'auriez pas un module ou autre chose qui interviendrait sur les caractéristiques ?

Non, je n'ai rien greffé, c'est incompréhensible. Le problème c'est de reproduire le bug pour mieux cerner où cela se passe, je vais essayer d'y passer un peu de temps, je vous tiens au courant.

Link to comment
Share on other sites

15 hours ago, Eolia said:

Le nom du tpl concerné est indiqué en haut de ce fichier compilé ;) 

A priori c'est le blockcart-json.tpl dans votre thème.

La ligne correcte est celle-ci normalement:

"free_ship": {(!$shipping_cost_float && !count($cart->getDeliveryAddressesWithoutCarriers(true)))|json_encode},

Regardez le tpl du thème par défaut au cas où.

Merci Eolia, problème réglé.

Je rencontre un souci avec les déclinaisons quand il y en a beaucoup à générer. Le script ne va jamais à terme sans planter (aucune erreur affichée à l'écran) et le timeout n'est pas en cause.

Par exemple je dois générer des déclinaisons de couleurs : 3 couleurs avec 19 choix possible pour chacune, cela fait 6859 combinaisons (19^3). Si on indique 10 produits en stock pour chaque déclinaison, ça donne une quantité de 68590. Le script crée d'abord les 6859 combinaisons (cela prend un peu plus de 10 minutes) puis il incrémente les quantités pour chacune des combinaisons créées (cela dure environ 15/20 minutes supplémentaires) puis cela se termine par une page blanche.

En local malgré la page "vide" finale, le produit est en stock avec ses quantités et ses déclinaisons mais en live ça ne marche pas, le plantage semble se produire avant la fin de la génération des combinaisons (soit durant les 10 premières minutes).

Je profite de ce souci de déclinaisons pour poser la question de la compatibilité de Store Commander avec PhenixSuite, quelqu'un utilise t'il ce module ?

Link to comment
Share on other sites

2 minutes ago, Fab20620 said:

Je profite de ce souci de déclinaisons pour poser la question de la compatibilité de Store Commander avec PhenixSuite, quelqu'un utilise t'il ce module ?

Bonjour Fab20620, Oui j'ai ce module mais dans une vieille version qui ne necessitait pas encore d'abonnement etc...

J'avais fait des tests brefs sans trop pousser via store commander sur une version hébergée par Eolia et je n'avais rien noté d'anormal mais je n'utilise pas cette fonction. Donc ce message n'aidera sans doute pas vraiment.
Bon courage :)

Link to comment
Share on other sites

il y a 35 minutes, Fab20620 a dit :

Merci Eolia, problème réglé.

Je rencontre un souci avec les déclinaisons quand il y en a beaucoup à générer. Le script ne va jamais à terme sans planter (aucune erreur affichée à l'écran) et le timeout n'est pas en cause.

Par exemple je dois générer des déclinaisons de couleurs : 3 couleurs avec 19 choix possible pour chacune, cela fait 6859 combinaisons (19^3). Si on indique 10 produits en stock pour chaque déclinaison, ça donne une quantité de 68590. Le script crée d'abord les 6859 combinaisons (cela prend un peu plus de 10 minutes) puis il incrémente les quantités pour chacune des combinaisons créées (cela dure environ 15/20 minutes supplémentaires) puis cela se termine par une page blanche.

En local malgré la page "vide" finale, le produit est en stock avec ses quantités et ses déclinaisons mais en live ça ne marche pas, le plantage semble se produire avant la fin de la génération des combinaisons (soit durant les 10 premières minutes).

Je profite de ce souci de déclinaisons pour poser la question de la compatibilité de Store Commander avec PhenixSuite, quelqu'un utilise t'il ce module ?

Le problème de la génération des déclinaisons est un vaste chantier qui est à l'étude. Le code actuel pète soit en memory_limit soit en timeout vu les ressources que ça demande.

Regardez vos paramètres serveur en live.

Link to comment
Share on other sites

Bonjour tout le monde, je reviens avec deux questions rapides si ça parle à quelqu'un ?

1. Dans les champs de personnalisation, mettre un < ou un > comme valeur génère une erreur, bloquante (page blanche avec le message d'erreur en rouge). Il me semblait qu'avant on pouvait utiliser ces caractères, le système les encodait avant de les insérer en base. Savez-vous où je peux retrouver ce comportement ?

2. J'ai l'impression que je dois souvent cliquer deux fois sur un lien pour qu'il fonctionne, et surtout : sur le diaporama page d'accueil, et systématiquement sur le premier des produits associés, sur la page produit.

Avez-vous déjà rencontré cela ? Je ne comprends pas d'où ça peut venir, je ne vois rien d'anormal sur la feuille de styles, ni dans la source html, un clic droit + ouvrir le lien fonctionne du premier coup... Si certains d'entre vous ont déjà eu ce problème, et ont trouvé la raison, ça m'intéresse :) 

Merci !

Link to comment
Share on other sites

La fonction est dans ProductController

if (!Validate::isMessage($value)) {...

La fonction de Validate.php n'a jamais accepté ces caractères:

    public static function isMessage($message)
    {
        return !preg_match('/[<>{}]/i', $message);
    }

Cela pour éviter le code html ou javascript/json

Pour le clic sur les accessoires il semblerait que ce soit le bxslider qui prenne la main au 1er clic, je vais regarder ça.

Link to comment
Share on other sites

Trouvé! le bug est bien dans le bxslider.js.

Partie corrigée:

    var onTouchStart = function(e) {
      // Not mobile
      if (e.type !== 'touchstart') {
        return;
      }
      // watch only for left mouse, touch contact and pen contact
      // touchstart event object doesn`t have button property
      if (e.type !== 'touchstart' || e.button !== 0) {
        return;
      }
      // No. See: https://github.com/stevenwanderski/bxslider-4/commit/36dd8ca7614c664d0831936aeb31aa713a13be06
      //e.preventDefault();
      //disable slider controls while user is interacting with slides to avoid slider freeze that happens on touch devices when a slide swipe happens immediately after interacting with slider controls
      slider.controls.el.addClass('disabled');

 

Link to comment
Share on other sites

8 minutes ago, Sda33 said:

Mais je cherche où est bxslider.js, je trouve beaucoup de références à lui mais pas le fichier lui-même 😕 

Trouvé, et corrigé grâce à vous, merci mille fois c'est parfait !! 

(pour info \js\jquery\plugins\bxslider)

Link to comment
Share on other sites

Bonjour,

Version 1.6.2.12, avez-vous connaissance d'un problème avec les déclinaisons ? 

Genre des inversions de stock/d'affichage entre les déclinaisons (+ valables aussi sur les alertes produits retour en stock).

Je cherche mais si c'est un bug connu je prends toute solution :) Merci

Edited by Sda33
[résolu] (see edit history)
Link to comment
Share on other sites

36 minutes ago, Sda33 said:

Genre des inversions de stock/d'affichage entre les déclinaisons (+ valables aussi sur les alertes produits retour en stock).

En fait je pense que c'est en BO, fiche produit, onglet Quantités. Mes id déclinaisons n'apparaissent pas par ordre croissant et les libellés ne correspondent pas aux id. Voir image jointes

- dans "déclinaisons" mon id 76 est "bleu marine" et c'est la déclinaison par défaut

- dans "quantités" le 76 arrive après le 77 et les libellés sont inversés, le 76 est associé à la couleur verte alors que c'est la couleur du 77...

Du coup forcément on met à jour les mauvaises quantités ce qui provoque le problème.

Je regarde de mon côté mais si vous savez corriger plus rapidement... merci.

aattt01.JPG

aattt02.JPG

Link to comment
Share on other sites

Difficile à dire car je ne reproduis pas.

Je viens de créer plein de déclis sur ce produit: https://presta.devcustom.net/admin735kwefqu/index.php?controller=AdminProducts&id_product=17&updateproduct&token=8476d9e89f3acb957a7e42cadd58afaa

image.thumb.png.b26033ec22584f328d352dc49fa40603.png

image.thumb.png.4196821e82c549523dd67275abed0d82.png

Avez-vous édité ou supprimé des attributs à la main ?

Une requête vient de product_attribute et l'autre de stock_available.

Link to comment
Share on other sites

19 minutes ago, Eolia said:

Avez-vous édité ou supprimé des attributs à la main ?

Une requête vient de product_attribute et l'autre de stock_available.

Non, rien à la main mais je suis sur un vieux produit, peut-être un souci de mise à jour de version...?

J'étais sur /themes/default/template/controllers/products/quantities, et il me trouve bien ce qui est affiché, et donc en erreur :

Dans la boucle :
{foreach from=$attributes item=attribute}

Pour :
{$attribute['id_product_attribute']} j'ai 76 (qui doit être Bleu marine)

Et si j'affiche
{$attribute['attribute_designation']} j'ai "vert" qui correspond à l'id 77

 

Pouvez-vous me dire où est product_attribute ? Merci

Link to comment
Share on other sites

le code qui ramène les quantités est dans AdminProductController:: initFormQuantities($obj).

    public function initFormQuantities($obj)
    {
        if(!$this->default_form_language) {
            $this->getLanguages();
        }

        $data = $this->createTemplate($this->tpl_form);
        $data->assign('default_form_language', $this->default_form_language);

        if($obj->id) {
            if($this->product_exists_in_shop) {
                // Get all id_product_attribute
                $attributes = $obj->getAttributesResume($this->context->language->id);
                if(empty($attributes)) {
                    $attributes = array();
                    $attributes[] = array(
                        'id_product_attribute'  => 0,
                        'attribute_designation' => ''
                    );
                }

                // Get available quantities
                $available_quantity = array();
                $product_designation = array();
                $parcels = array();
                $in_wait = array();
                $total_wait = 0;
                foreach($attributes as $attribute) {
                    // Get available quantity for the current product attribute in the current shop
                    $available_quantity[$attribute['id_product_attribute']] =
                        (isset($attribute['id_product_attribute']) && $attribute['id_product_attribute'] ?
                        (int)$attribute['quantity'] :
                        (int)$obj->quantity
                    );
                    $total_wait = Db::getInstance()->getValue('
                        SELECT SUM(od.`product_quantity`)
                        FROM `'._DB_PREFIX_.'order_detail` od
                        INNER JOIN `'._DB_PREFIX_.'orders` o
                            ON(o.id_order = od.id_order
                            AND o.valid = 1)
                        INNER JOIN `'._DB_PREFIX_.'order_state` os
                            ON(os.id_order_state = o.current_state
                            AND os.shipped = 0)
                        WHERE od.`product_id` = '.(int)$obj->id.'
                        AND od.`product_attribute_id` = '.(int)$attribute['id_product_attribute'].'
                        AND od.`id_shop` = '.(int)Context::getContext()->shop->id
                    );
                    $in_wait[$attribute['id_product_attribute']]
                            ['used'] = $total_wait;
                    $in_wait[$attribute['id_product_attribute']]
                            ['free'] = $available_quantity[$attribute['id_product_attribute']] + $total_wait;
                    // Get parcels
                    if(isset($attribute['id_product_attribute']) && $attribute['id_product_attribute']) {
                        $parcels[$attribute['id_product_attribute']] = $attribute['parcels'];
                    }
                    else {
                        if($db_parcels = Db::getInstance()->getValue('
                            SELECT parcels
                            FROM '._DB_PREFIX_.'stock_available
                            WHERE id_product = '.(int)$obj->id.'
                            AND id_shop = '.(int)Context::getContext()->shop->id.'
                            AND id_product_attribute =  0
                        ')) {
                            $existing_parcels = unserialize($db_parcels);
                            if(!is_array($existing_parcels)) {
                                $existing_parcels = array();
                            }
                            $parcels[$attribute['id_product_attribute']] = $existing_parcels;
                        }
                    }
                    // Get all product designation
                    $product_designation[$attribute['id_product_attribute']] = rtrim(
                        $obj->name[$this->context->language->id].' - '.$attribute['attribute_designation'],
                        ' - '
                    );
                }

                $show_quantities = true;
                if(Shop::isFeatureActive()) {

                    $shop_context = Shop::getContext();
                    $shop_group = new ShopGroup((int)Shop::getContextShopGroupID());

                    // If we are in all shops context and not all groups share stocks, 
                    // it's not possible to manage quantities at this level
                    if($shop_context == Shop::CONTEXT_ALL && !ShopGroup::isAllShared(true)) {
                        $show_quantities = false;
                    }
                    // If we are in group shop context
                    elseif($shop_context == Shop::CONTEXT_GROUP) {
                        // If quantities are not shared between shops of the group, 
                        // it's not possible to manage them at group level
                        if(!$shop_group->share_stock) {
                            $show_quantities = false;
                        }
                    }
                    // else we are in shop context
                    elseif($shop_context == Shop::CONTEXT_SHOP) {
                        // If quantities are shared between shops of the group, 
                        // it's not possible to manage them for a given shop
                        if($shop_group->share_stock) {
                            $show_quantities = false;
                        }
                    }
                }
                $data->assign('ps_stock_management', Configuration::get('PS_STOCK_MANAGEMENT'));
                $data->assign('has_attribute', $obj->hasAttributes());
                // Check if product has combination, to display the available date 
                // only for the product or for each combination
                if(Combination::isFeatureActive()) {
                    $data->assign('countAttributes',
                        (int)Db::getInstance()->getValue('
                            SELECT COUNT(id_product)
                            FROM '._DB_PREFIX_.'product_attribute
                            WHERE id_product = '.(int)$obj->id
                        )
                    );
                }
                else {
                    $data->assign('countAttributes', false);
                }
                // If advanced stock management is active, checks associations
                $advanced_stock_management_warning = false;
                if(Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT') 
                    && $obj->advanced_stock_management
                ) {
                    $p_attributes = Product::getProductAttributesIds($obj->id);
                    $warehouses = array();

                    if(!$p_attributes) {
                        $warehouses[] = Warehouse::getProductWarehouseList($obj->id, 0);
                    }

                    foreach($p_attributes as $p_attribute) {
                        $ws = Warehouse::getProductWarehouseList($obj->id, $p_attribute['id_product_attribute']);
                        if($ws) {
                            $warehouses[] = $ws;
                        }
                    }
                    $warehouses = Tools::arrayUnique($warehouses);

                    if(empty($warehouses)) {
                        $advanced_stock_management_warning = true;
                    }
                }
                if($advanced_stock_management_warning) {
                    $this->displayWarning($this->l('If you wish to use the advanced stock management, you must:'));
                    $this->displayWarning('- '.$this->l('associate your products with warehouses.'));
                    $this->displayWarning('- '.$this->l('associate your warehouses with carriers.'));
                    $this->displayWarning('- '.$this->l('associate your warehouses with the appropriate shops.'));
                }

                $pack_quantity = null;
                // If product is a pack
                if(Pack::isPack($obj->id)) {
                    $items = Pack::getItems((int)$obj->id, Configuration::get('PS_LANG_DEFAULT'));

                    // Gets an array of quantities (quantity for the product / quantity in pack)
                    $pack_quantities = array();
                    foreach($items as $item) {
                        /** @var Product $item */
                        if(!$item->isAvailableWhenOutOfStock((int)$item->out_of_stock)) {
                            $pack_id_product_attribute = Product::getDefaultAttribute($item->id, 1);
                            $pack_quantities[] = Product::getQuantity(
                                $item->id, 
                                $pack_id_product_attribute
                            ) / ($item->pack_quantity !== 0 ? $item->pack_quantity : 1);
                        }
                    }

                    // Gets the minimum
                    if(count($pack_quantities)) {
                        $pack_quantity = $pack_quantities[0];
                        foreach($pack_quantities as $value) {
                            if($pack_quantity > $value) {
                                $pack_quantity = $value;
                            }
                        }
                    }

                    if(Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT') 
                        && !Warehouse::getPackWarehouses((int)$obj->id)
                    ) {
                        $this->displayWarning($this->l('You must have a common warehouse between this pack and its product.'));
                    }
                }

                $data->assign(array(
                    'attributes'                => $attributes,
                    'available_quantity'        => $available_quantity,
                    'in_wait'                   => $in_wait,
                    'parcels'                   => $parcels,
                    'pack_quantity'             => $pack_quantity,
                    'stock_management_active'   => Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT'),
                    'product_designation'       => $product_designation,
                    'product'                   => $obj,
                    'show_quantities'           => $show_quantities,
                    'order_out_of_stock'        => Configuration::get('PS_ORDER_OUT_OF_STOCK'),
                    'pack_stock_type'           => Configuration::get('PS_PACK_STOCK_TYPE'),
                    'increase_quantity_pack'    => Configuration::get('PS_INCREASE_QUANTITY_PACK'),
                    'token_preferences'         => Tools::getAdminTokenLite('AdminPPreferences'),
                    'token'                     => $this->token,
                    'languages'                 => $this->_languages,
                    'id_lang'                   => $this->context->language->id
                ));
            }
            else {
                $this->displayWarning($this->l('You must save the product in this shop before managing quantities.'));
            }
        }
        else {
            $this->displayWarning($this->l('You must save this product before managing quantities.'));
        }

        $this->tpl_form_vars['custom_form'] = $data->fetch();
    }

 

Link to comment
Share on other sites

4 hours ago, Eolia said:

Table ps_product_attribute dans la base de données et table ps_stock_available pour les quantités

dans ps_product_attribute : toutes les quantités pour mon produit sont à 0 (les qtés/attribut ici semblent ne pas servir, si?)

dans ps_stock_available : les quantités par id attribute sont correctes

+ de précisions :

  • Je n'ai pas de problème en BDD je crois (stock_available est OK)
  • Je n'ai pas de problème en Front Office (j'ai les bonnes quantités par déclinaison, et pas de mélange)
  • J'ai uniquement un problème d'affichage en Back Office produit, quantités par déclinaison
  • Ce problème est gênant, parce qu'il induit des erreurs de saisie impactantes

Où :

  • mes déclinaisons n'apparaissent pas par id croissant
  • les quantités affichées et modifiées correspondent bien à celles de l'id
  • le texte ne correspond pas à celui de l'id affiché, mais à celui qui aurait dû s'afficher si les id avaient été dans l'ordre
  • le surlignage mettant en évidence la valeur par défaut correspond bien au bon id_attribute

Donc sur cette grille product\quantités  pour un produit avec déclinaisons : dans une même requête id_attribute + quantité sont corrects, mais pas l'ordre ni le libellé.

Ce problème affecte au moins :

  • des produits créés en 1.6.1.24
  • des produits créés en 1.6.2.9

 

Merci pour l'identification AdminProductControllers, j'avais justement le nez dedans, j'essaie de comprendre qu'est-ce qui met en vrac la construction du tableau attributes. J'ai l'impression qu'à la création tout est ok, mais quand on modifie les quantités il se passe quelque chose... je vais essayer aussi de reproduire le moment où ça part de travers.

 

 

Edited by Sda33
[résolu] (see edit history)
Link to comment
Share on other sites

quand vous modifiez une quantité et que vous quittez le champ il y a 2 appels ajax pour rafraichir le tableau.

Le 1er qui appelle ajax-tab.php:

actionQty: set_qty

id_product_attribute: 446

value: 10

ajaxProductQuantity: 1

id_product: 17

token: 8476d9e89f3acb957a7e42cadd58afaa

ajax: 1

controller: AdminProducts

action: productQuantity

 

Qui ensuite renvoie vers ce second appel:

controller: AdminProducts

token: 8476d9e89f3acb957a7e42cadd58afaa

id_product: 17

action: Quantities

updateproduct:

ajax:1

rand: 1690367879404

cet appel ajax enregistre la quantité et rafraichit le tpl des quantités. Pas de modules hookés sur updateProduct ?

Edited by Eolia (see edit history)
Link to comment
Share on other sites

3 hours ago, Eolia said:

cet appel ajax enregistre la quantité et rafraichit le tpl des quantités. Pas de modules hookés sur updateProduct

Merci beaucoup pour ces explications, je vais voir si elles me permettent d'avancer mais :

  • non je n'ai pas de module greffé sur le UpdateProduct, j'ai vérifié
  • le problème est présent sur mes deux sites, un qui a presque 7 ans et l'autre qui n'est même pas encore en production
  • il se produit dès l'affichage de la page, avant de modifier les quantités, et il ne correspond pas à ce qu'il y a en base de données (une partie de la ligne est correcte : id et qté, et pas les autres informations nom de la déclinaison)

Je viens de créer un nouveau produit. Je lui associe une par une 4 valeurs pour la déclinaison couleurs. Je n'ai pas encore mis de quantité, je vais sur "quantités" et bim, c'est dans le désordre, avec les id qui ne correspondent pas aux libellés.

C'est vraiment très curieux... 

 

atr01.JPG

atr02.JPG

Edited by Sda33
[résolu] (see edit history)
Link to comment
Share on other sites

C'est dès cette fonction qu'il y a un problème :

$attributes = $obj->getAttributesResume($this->context->language->id);

Savez-vous où elle est pour que je continue à remonter... ?

 

(+ d'infos ci-dessous)

dans AdminProductsController ici elle me renvoie 

123-Couleur - Bleu clair
124-Couleur - Bleu marine
125-Couleur - Fushia
122-Couleur - Jaune

au lieu de 

122 = Bleu clair
123 = Bleu marine
124 = Fushia
125 = Jaune

ici :

 

public function initFormQuantities($obj)
    {
        if(!$this->default_form_language) {
            $this->getLanguages();
        }

        $data = $this->createTemplate($this->tpl_form);
        $data->assign('default_form_language', $this->default_form_language);

        if($obj->id) {
            if($this->product_exists_in_shop) {
                // Get all id_product_attribute
                $attributes = $obj->getAttributesResume($this->context->language->id);
Edited by Sda33
[résolu] (see edit history)
Link to comment
Share on other sites

[RESOLU]

J'ai trouvé le problème.

Il est dans la classe Product, fonction getAttributesResume.

Ce bout de code attribue ligne par ligne le résultat de deux requêtes enregistrées dans des tableaux mais ne jointe pas sur l'id_product_attribute :

 foreach($lang as $k => $row) {
            $combinations[$k]['attribute_designation'] = $row['attribute_designation'];
        }

Donc si les deux requêtes ne sortent pas cet ID dans le même ordre, les ID et les libellés sont mélangés.

J'ai donc ajouté un ORDER BY id_product_attribute sur chacun des deux SELECT au-dessus.

 Ici :

$combinations = Db::getInstance()->executeS('
            SELECT pa.*, product_attribute_shop.*
            FROM `'._DB_PREFIX_.'product_attribute` pa
            '.Shop::addSqlAssociation('product_attribute', 'pa').'
            WHERE pa.`id_product` = '.(int)$this->id.'
            GROUP BY pa.`id_product_attribute` order by pa.`id_product_attribute`
        ');

et là :

        $lang = Db::getInstance()->executeS('
                SELECT pac.id_product_attribute, 
                    GROUP_CONCAT(agl.`name`, \''.pSQL($attribute_value_separator).'\', 
                    al.`name` 
                    ORDER BY agl.`id_attribute_group` 
                    SEPARATOR \''.pSQL($attribute_separator).'\') as attribute_designation
                FROM `'._DB_PREFIX_.'product_attribute_combination` pac
                LEFT JOIN `'._DB_PREFIX_.'attribute` a 
                    ON(a.`id_attribute` = pac.`id_attribute`)
                LEFT JOIN `'._DB_PREFIX_.'attribute_group` ag 
                    ON(ag.`id_attribute_group` = a.`id_attribute_group`)
                LEFT JOIN `'._DB_PREFIX_.'attribute_lang` al 
                    ON(a.`id_attribute` = al.`id_attribute` 
                    AND al.`id_lang` = '.(int)$id_lang.')
                LEFT JOIN `'._DB_PREFIX_.'attribute_group_lang` agl 
                    ON(ag.`id_attribute_group` = agl.`id_attribute_group` 
                    AND agl.`id_lang` = '.(int)$id_lang.')
                WHERE pac.id_product_attribute IN ('.implode(',', $product_attributes).')
                GROUP BY pac.id_product_attribute ORDER BY pac.id_product_attribute');

Link to comment
Share on other sites

7 minutes ago, Eolia said:

Vous êtes sous mysql (si oui quelle version ?) ou mariaDB ?

Sous MariaDB c'est implicite suivant le GROUP BY si on ne l'a pas précisé.

Je vais l'ajouter pour les personnes dans votre cas.

Sur MySQL 8.0.33.

Link to comment
Share on other sites

Bonjour Eolia,

Sur un des modules que j'utilise, j'ai un message qui s'affiche en haut de la page de config du module:

Compatibilité PHP 7.4 et+ : Ce module contentbox utilise à tort une variable qui n'a pas été déclarée dans sa classe ["monolanguage_content","text_editor_content","content_wrapper","content_wrapper_class","content_wrapper_id","_html","complete_content_files_location","simple_content_files_location","ignore_changes_content_changes"]

Y a-t-il quelque chose à faire ou c'est juste un warning ?

Lien du module : https://contentbox.org/

Edited by P i l o u (see edit history)
Link to comment
Share on other sites

C'est un warning pour vous informer que ce module n'a pas été écrit pour les versions supérieures ou égales à PHP 7.4

En PHP 9 ça deviendra une FATAL ERROR.

En gros, le module utilise des variable $this->quelque_chose mais le $quelque_chose n'a pas été déclaré en début de classe.

  • Like 1
Link to comment
Share on other sites

11 hours ago, Eolia said:

La version 1.6.2.14 est dispo ;) 

Bonnes vacances !

Bonjour Eolia

Bonnes vacances a vous aussi !

Je rencontre ce message d'erreur quand je veux modifier la configuration du module paypal avec la version 1.6.2.14 :

[PrestaShop] Fatal error in module file :C:\wamp64\www\Backup\tools\smarty\sysplugins\smarty_internal_template.php:
Uncaught --> Smarty: Unable to load template 'file:C:\wamp64\www\Backup/modules/paypal/views/templates/installmentBanner/banner.tpl' <-- thrown

Link to comment
Share on other sites

40 minutes ago, Eolia said:

Re

Les bannnieres s'installent bien en rechargeant le module

Reste plus qu'a le configurer !

Paypal n'apparait plus dans les moyens de paiement disponibles ! et pourtant il est bien greffé !

Merci Eolia pour l'aide

Edited by docmusicstation (see edit history)
Link to comment
Share on other sites

il y a 50 minutes, docmusicstation a dit :

Re

Les bannnieres s'installent bien en rechargeant le module

Reste plus qu'a le configurer !

Paypal n'apparait plus dans les moyens de paiement disponibles ! et pourtant il est bien greffé !

Merci Eolia pour l'aide

Verifiez groupes, pays et monnaies dans Modules => Paiement

image.thumb.png.f3b03e52237d63798704fdcc8342bd9f.png

Link to comment
Share on other sites

Ben il n'y a pas 50 solutions. Pour que le module apparaisse il faut qu'il soit:

- greffé sur les hooks prévus

- activé

- complètement configuré

- autorisé pour les groupes, pays et monnaies

- qu'il n'y ait pas d'autres modules qui le bloqueraient (genre restriction des moyens de paiement ou autre)

Link to comment
Share on other sites

7 hours ago, docmusicstation said:

Bonjour Eolia

Bonnes vacances a vous aussi !

Je rencontre ce message d'erreur quand je veux modifier la configuration du module paypal avec la version 1.6.2.14 :

[PrestaShop] Fatal error in module file :C:\wamp64\www\Backup\tools\smarty\sysplugins\smarty_internal_template.php:
Uncaught --> Smarty: Unable to load template 'file:C:\wamp64\www\Backup/modules/paypal/views/templates/installmentBanner/banner.tpl' <-- thrown

Bonjour Docmusicien, Eolia

J'ai eu le même erreur lors de la mise à jour de phenixv13 vers v14

En rechargeant le module paypal Eolia a posté pour vous rassurer tout refonctionne parfaitement (testé paiement en temps réel)

il n'y a rien à reconfigurer sur paypal si vous l'aviez déjà faites sur l'ancien version phenix, sa position, compte commerçant sont en place etc

testpaypal.thumb.JPG.65e6aba497d611df0280f6d77a99e065.JPGtestpaypalv14ok.JPG.aff181b3344ebc5c7fbe634e893f81fa.JPG

 

 

Bonne journée à vous

Et mille merci encore Eolia pour tous ce que vous nous offrez

 

Edited by Khundo2023 (see edit history)
Link to comment
Share on other sites

  • Eolia changed the title to Sortie de la version 1.6.2.30 PhenixSuite - By @Eolia

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...