Navigation

    aide prestashop

    PrestaHelp

    • S'inscrire
    • Se connecter
    • Recherche
    • Catégories
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Recherche
    1. Accueil
    2. camille
    3. Messages
    C
    • Profil
    • Abonnements
    • Abonnés
    • Sujets
    • Messages
    • Meilleur sujets
    • Groupes

    Messages postés par camille

    • Problème de lien vers tpl module custom

      Bonjour,
      Tout d'abord un grand merci à Eolia pour la dernière mouture de Phenix. La maj s'est faite sans souci. Et il y a maintenant le champ date_upd dans la table product_download ! Ce qui m'a permis de finaliser mon module permettant, d'une part, d'avoir sur la home une liste de produits dématérialisés récemment mis à jour (hors nouveaux produits), d'autre part, sur la fiche du produit, de pouvoir afficher la date de mise à jour du fichier. Super !
      Mais je souhaite aller un peu plus loin et, dans le bloc sur la home, mettre un lien vers une page affichant tous les produits récemment mis à jour.
      Dans le module, j'ai donc créé un fichier updproducts dans controller> front avec ceci :

      <?php
      
      class BlockUpdProductsUpdProductsModuleFrontController extends ModuleFrontController
      {
      
          public function initContent()
          {
              parent::initContent();
      
              $updProducts = $this->module->getUpdProducts();
      
              $this->context->smarty->assign([
                  'upd_products' => $updProducts,
                  'mediumSize' => Image::getSize(ImageType::getFormatedName('medium')),
                  'homeSize' => Image::getSize(ImageType::getFormatedName('home'))
              ]);
      
              $this->setTemplate('module:blockupdproducts/views/templates/front/updproducts.tpl');
          }
      }
      

      J'ai créé un tpl (updproducts.tpl) dans views/templates/front :

      {capture name=path}{l s='Updated products'}{/capture}
      
      {block name='page_content'}
          <h1>{l s='Updated Products'}</h1>
          {if $upd_products}
             
              	<div class="content_sortPagiBar">
          	<div class="sortPagiBar clearfix">
      			{include file="./product-sort.tpl"}
      			{include file="./nbr-product-page.tpl"}
      		</div>
          	<div class="top-pagination-content clearfix">
              	{include file="./product-compare.tpl"}
                  {include file="$tpl_dir./pagination.tpl"}
              </div>
      	</div>
      
      	{include file="./product-list.tpl" products=$upd_products}
      
      	<div class="content_sortPagiBar">
              <div class="bottom-pagination-content clearfix">
              	{include file="./product-compare.tpl"}
      			{include file="./pagination.tpl" paginationId='bottom'}
              </div>
      	</div>
          {else}
              <p>{l s='No updated products available.'}</p>
          {/if}
      {/block}
      

      Et dans le tpl du bloc sur la home, j'ai ajouté le lien :

      <a href="{$link->getModuleLink('blockupdproducts', 'updproducts')}" title="{l s='View all updated products'}">{l s='View all'}</a>
      

      Mais cela débouche sur "Page introuvable". L'url du lien s'affiche ainsi :
      https://monsite.fr/module/blockupdproducts/updproducts.

      J'ai cherché sur le Net, cela semble correct mais difficile de savoir si ce que j'ai trouvé s'applique à 1.7 ou à 1.6.
      En relisant mon code, je pense que je devrai ajouter quelque chose pour qu'il trouve les tpl product-list etc, vu que c'est appelé depuis le module, mais ce n'est pas cela qui rend la page "introuvable".

      De plus, il faudrait que je puisse réécrire l'url dans SEO pour que cela ne soit pas le chemin du module mais c'est une autre question (et en nofollow noindex idéalement, avec url canonicale, mais là j'abuse).

      Auriez-vous une piste pour moi ?

      Merci d'avance

      Et vraiment, Phenix est génial !! Merci encore Eolia, pour ce magnifique boulot !

      posté dans PhenixSuite
      C
      camille
    • RE: date_upd produits

      En fait, c'est bien la liste de produits que je veux afficher selon le critère de tri : date_fileupd (comme cela existe avec date_add, date_upd).
      J'ai donc overridé :

      • AdminPPreferencesController en modifiant la ligne "sales" qui ne semble pas servir :
       array('id' => '8', 'name' => $this->l('Product file update'))
      
      • product_sort.tpl :
      <option value="date_fileupd:asc"{if $orderby eq 'date_fileupd' AND $orderway eq 'asc'} selected="selected"{/if}>{l s='File Update Date: Oldest first'}</option>
      			<option value="date_fileupd:desc"{if $orderby eq 'date_fileupd' AND $orderway eq 'desc'} selected="selected"{/if}>{l s='File Update Date: Newest first'}</option>
      
      • Category.php avec ajout d'un orderby avant la requête sql
      if($order_by == 'date_fileupd') {
                  $order_by_prefix = 'pd';
                  $order_by = 'date_fileupd';
              } 
      

      et dans le sql ajouté :

      LEFT JOIN `'._DB_PREFIX_.'product_download` pd
                      ON(pd.`id_product` = p.`id_product`)
      
      • Tools.php, dans $list ajout du champ
      8 => 'date_fileupd'
      

      et dans if prefix

      	elseif($value == 'date_fileupd') {
                              $order_by_prefix = 'pd.';
                            }
      

      Et je crois que c'est tout.
      Dans Préférences > Produits > Pagination : le nouveau choix est bien affiché.
      En front, ce nouveau choix apparaît dans la sélection de tri.
      Mais ... que ce soit en le mettant comme tri par défaut dans l'admin, ou en le sélectionnant sur la page produit, et même si me tri apparaît bien dans l'url, c'est l'ordre par défaut (par nom) qui est appliqué.
      Et pourtant, au début, dans AminPPreferencesController, j'avais mis comme id 8 et là, en front, il affichait "sales" dans la liste de tri.
      Je vide le cache (suppression de index.php dans cache/classes à chaque modif).
      Si vous avez un semblant de tuyau à me donner, je reprends courage :-)

      Merci d'avance !

      {EDIT] c'est dfans Tools.php que j'ai remplacé "sales" par "date_fileupd" pour l'id 8. Dans AdminPPreferencesController, il n'y était pas, je l'ai rajouté)

      posté dans Bugs & Améliorations
      C
      camille
    • RE: date_upd produits

      Merci Eolia. Mais le module productcomments n'a pas de fonction de tri sur tel ou tel paramètre ou j'ai pas compris quelque chose ?

      posté dans Bugs & Améliorations
      C
      camille
    • RE: date_upd produits

      Bonsoir,
      En fait, j'ai pas mal avancé sur ce module qui ajoute un champ date_fileupd à la table product_download vu que j'avais déjà commencé précédemment (avant de me rendre compte que date_upd changeait à chaque fermeture de page).
      J'ai configuré le bazar pour qu'on remplisse à la main le champ, exactement comme le champ date_expiration. Un hook permettra ensuite d'ajouter un onglet "Dernières mises à jour" sur la home, et cette date sera affichée sur la fiche du produit, et, si tout se passe bien comme prévu, s'adapter à la déclinaison choisie.
      Mais il y a une dernière chose que je souhaite ajouter avant de tester le module, c'est la possibilité d'ajouter un tri par défaut sur ce champ dans les Préférences > Produit > Pagination.
      J'ai trouvé le fichier qui affiche le choix dans l'admin, c'est AdminPPreferencesController.php. Mais quel est le fichier qui gère les requêtes pour ces tris ?? Serait-ce bien la fonction public function getProducts($id_lang, $p, $n, $order_by = null, $order_way = null, $get_total = false, ... à la ligne 844 de Category.php ?
      Je voudrais juste savoir si c'est bien cela.

      Merci d'avance

      posté dans Bugs & Améliorations
      C
      camille
    • RE: Champ description longue pour les catégories

      Finalement, je pense avoir trouvé. Il fallait juste garder

      $longdescription = Tools::getValue('longdescription');
      $longdescription = pSQL($longdescription, true);
      

      Maintenant tout est fonctionnel (en tout cas, à première vue). Je peux créer une nouvelle catégorie avec une description longue en bas de page, la mettre à jour. Si je supprime le texte, la ligne est effacée de la base de données (pour éviter de l'alourdir). Idem si la catégorie est supprimée.
      Si jamais ça intéresse quelqu'un, je le mets à dispo de qui veut :-) Compatible 1.6 et Phenix uniquement.

      posté dans Modules
      C
      camille
    • RE: Champ description longue pour les catégories

      Eolia, tout à fait par hasard, est-ce que la v33 prévoit un second champ de texte avec éditeur pour les pages de catégories afin de pouvoir améliorer son SEO ?
      Juste pour savoir si j'essaie de régler le problème du HTML. Je me suis basée sur des tutos trouvés à gauche et à droite, j'ai bien mon nouveau champ avec l'éditeur. Mais je ne peux pas mettre de code comme des class="" car les doubles guillemets provoquent une erreur sql. Alors que je peux le faire dans le champ Description. J'ai essayé différentes choses. Avec pSQL, plus de balises, le texte est au simple format texte. J'ai bien trouvé une parade, le html est correctement affiché en BO et en FO, mais dans la base de données cela donne ceci

      &lt;div class=&quot;test&quot;&gt;
      &lt;h2&gt;Titre&lt;/h2&gt;
      &lt;p&gt;Test html&lt;/p&gt;
      &lt;p&gt;Seconde ligne&lt;/p&gt;
      &lt;p&gt;Troisi&egrave;me ligne&lt;/p&gt;
      &lt;/div&gt;
      

      Cela serait sans doute plus simple de faire des overrides mais j'ai essayé avec des hooks. Tout fonctionne bien sauf ça. Du coup, j'ai dû mettre html_entity_decode dans le tpl pour qu'il n'affiche pas en clair le html.
      Voici par exemple le code de la fonction qui met à jour le champ longdescription

      public function updateLongDescription($params)
      {
          // Récupérer l'ID de la catégorie
          $id_category = (int)Tools::getValue('id_category');
      
          // Vérifier si l'ID est valide
          if ($id_category <= 0) {
              return; // Si l'ID est invalide, on quitte la fonction
          }
      
          // Récupérer l'objet catégorie
          $category = new Category($id_category);
      
          // Vérifier si l'objet catégorie est valide
          if (!Validate::isLoadedObject($category)) {
              return; // Si l'objet catégorie n'est pas valide, ne pas procéder
          }
      
          // Récupérer la langue actuelle
          $id_lang = (int)$this->context->language->id;
      
          // Récupérer la valeur du champ longdescription depuis la requête
          $longdescription = Tools::getValue('longdescription');
      
          // Si le champ est vide, supprimer la ligne dans la table
          if (empty($longdescription)) {
              // Supprimer l'enregistrement correspondant dans la table category_long_description_lang
              $sql = 'DELETE FROM `' . _DB_PREFIX_ . 'category_long_description_lang`
                      WHERE `id_category` = ' . $id_category . ' 
                      AND `id_lang` = ' . $id_lang;
              Db::getInstance()->execute($sql);
              return; // Sortir de la fonction après suppression
          }
        
          // Sécuriser la valeur avec htmlentities pour éviter les problèmes de collation et d'injection SQL
          // $longdescription = strip_tags($longdescription, '<h1><h2><h3><h4><div><p><b><i><u><a><br><ul><ol><li>'); 
             $longdescription = Tools::getValue('longdescription');
      // $allowed_html_tags = '<h1><h2><h3><h4><div><p><b><i><u><a><br><ul><ol><li><img>';
      // $longdescription = strip_tags($longdescription, $allowed_html_tags);
      $longdescription = htmlentities($longdescription);
      $longdescription = pSQL($longdescription, true);
          // Vérifier si un enregistrement existe déjà pour cette catégorie et cette langue
          $sql = 'SELECT `id_category` 
                  FROM `' . _DB_PREFIX_ . 'category_long_description_lang`
                  WHERE `id_category` = ' . $id_category . ' 
                  AND `id_lang` = ' . $id_lang;
          $existing = Db::getInstance()->getValue($sql);
      
          if ($existing) {
              // Si un enregistrement existe déjà, mettre à jour le contenu
              $sql = 'UPDATE `' . _DB_PREFIX_ . 'category_long_description_lang`
                      SET `longdescription` = "' . $longdescription . '"
                      WHERE `id_category` = ' . $id_category . ' 
                      AND `id_lang` = ' . $id_lang;
          } else {
              // Sinon, insérer un nouvel enregistrement
              $sql = 'INSERT INTO `' . _DB_PREFIX_ . 'category_long_description_lang` 
                      (`id_category`, `id_lang`, `longdescription`) 
                      VALUES (' . $id_category . ', ' . $id_lang . ', "' . $longdescription . '")';
          }
      
          // Exécuter la requête
          Db::getInstance()->execute($sql);
      }
      

      J'ai laissé certaines choses en les commentant pour les tests.
      Si quelqu'un a 2 minutes pour y jeter un oeil et me dire comment envoyer cela correctement à la bdd et ne pas avoir à utiliser html_entity_decode, ce serait vraiment hyper sympa !

      Merci d'avance

      posté dans Modules
      C
      camille
    • RE: date_upd produits

      Bien sûr ! Franchement, j'admire ! Tout ça + répondre au forum ! Et les journées ne font que 24h ...
      En attendant, j'essaie de créer un champ date à remplir manuellement quand on upload un nouveau fichier afin d'afficher cette date dans la fiche produit. Vu que je ne suis pas rapide pour ce genre de choses, la maj sera peut-être dispo avant, pas grave, j'apprends :-)

      posté dans Bugs & Améliorations
      C
      camille
    • RE: date_upd produits

      Ah :-) j'attends cette v33 avec impatience ! Vous auriez une idée de quand elle sera dispo ? Sans vouloir vous presser bien sûr, c'est énorme ce que vous faites !

      posté dans Bugs & Améliorations
      C
      camille
    • RE: Champ description longue pour les catégories

      ok merci. Je retiens pour d'autres modifs, pour celle-ci, le module est quasiment fonctionnel à 100%, j'ai encore un petit bug sur le HTML à l'enregistrement mais il crée sa table et n'utilise aucun override, juste les hooks.

      posté dans Modules
      C
      camille
    • RE: date_upd produits

      De fait, j'aurais dû commencer par ce test ! Effectivement, sur la version vierge, cela ne le fait pas. J'ai donc cherché, j'ai désactivé les overrides, les modules non Prestashop, le module que j'ai créé pour récupérer la date_upd afin de l'afficher. J'ai activé le debug et toutes ses options pour voir ce qui était appelé. Pas de changement. La différence avec l'installation vierge est que les produits sont des produits dématérialisés. J'en ai donc créé un sur le Phenix vierge. Bingo, là, chaque fois que j'ouvre la fiche du produit et la referme, date_upd change même si je quitte la page en cliquant sur un des menus de la colonne de gauche.
      J'ai alors testé l'inverse sur mon site de dev, en créant un produit standard. Mais là, la date_upd est aussi modifiée chaque fois que je quitte la page. Il n'y a aucun onglet supplémentaire.

      posté dans Bugs & Améliorations
      C
      camille
    • Champ description longue pour les catégories

      Bonjour,
      Prestashop 1.6 ne prévoyait pas de champ texte supplémentaire pour créer du contenu SEO en bas de page de catégorie. Sur le Net, j'ai trouvé des tutos pour y remédier, mais en modifiant la table category_lang par ajout d'un champ + overrides. Cela fonctionne mais quid lors de la prochaine mise à jour de Phenix Suite ? Alors, j'essaie de créer un module qui ajoute une nouvelle table. Tout fonctionne, sauf lorsque j'essaie de sauvegarder mon texte : il cherche le champ dans category_lang et bien sûr ne le trouve pas. J'ai cherché sans succès comment lui indiquer la bonne table. Alors que fais-je ? Je reviens au champ ajouté dans la table via le module ? Il n'y a pas de risque qu'il soit supprimé lors de la (très attendue) prochaine mise à jour ?

      Merci d'avance

      posté dans Modules
      C
      camille
    • date_upd produits

      Bonjour à tous,
      Je constate que la date_upd d'un produit est modifiée même quand il n'y a pas eu de modif sur la fiche de ce produit et qu'on l'a quittée sans Enregistrer. Même si je quitte la fiche en cliquant sur Produits par exemple. Est-ce normal ? Je n'avais pas constaté cela auparavant, peut-être était-ce déjà comme cela. Mais cela fausse l'affichage des produits quand on le règle sur date de mise à jour : un produit non modifié, juste ouvert puis quitté, se retrouve en tête de classement. Si c'est normal, je vais éviter d'ouvrir une fiche sans y apporter de modification.

      Merci d'avance

      posté dans Bugs & Améliorations
      C
      camille
    • TinyMCE

      Bonjour,
      Donc un PS 1.6.2.24 mis à jour vers Phenix 1.6.2.32. Module Advanced menu installé. Dans un des sous-menu, il y a une image. Tout fonctionnait très bien.
      Et puis, j'ai voulu remplacer l'image, ajouter loading="lazy" et paf, le code HTML disparait, seule reste la balise p. Le reste, span, img, à l'as.
      En regardant d'un peu plus près les boutons de l'éditeur pour ajouter du contenu à cet élément de module, je constate que j'ai un bouton "Fichier" (pour ajouter un fichier, ce qui n'a pas d'utilité) et pas de bouton "Outils" pour accéder au code.
      J'ai comparé sur l'ancienne install (1.6.0.6), il y a bien le bouton Outils (et pas Fichiers).
      J'ai vu dans les pages CMS que l'éditeur était bien fourni en boutons... et avait bien Outils.
      Je ne peux plus ajouter l'image, elle disparaît quand on sauvegarde l'élément de menu.
      La seule chose que j'avais faite avant de constater ce souci était d'activer le cache, désactiver la recompilation, CCC, etc. Mais même en redésactivant tout ça, vider le cache, supprimer index.php dans cache>class, cela ne revient pas.
      Idem en activant l'ancienne version jQuery (on ne sait jamais).
      Au final, j'ai été directement écrire le code dans la table du menu, mais ce n'est pas particulièrement pratique.
      Si quelqu'un a une idée de la raison de ce bug soudain ?

      Merci d'avance.

      posté dans Bugs & Améliorations
      C
      camille
    • RE: Déclinaisons virtuelles avec fichiers

      Bonjour Eolia,
      Je ne veux pas vous mettre la pression (nonon, pas du tout), mais ... vous pensez que la prochaine version sera bientôt dispo ? Je suis impatiente de tester mon module pour afficher les derniers produits mis à jour :-)

      Merci !!!

      posté dans PhenixSuite
      C
      camille
    • RE: [RESOLU]Lien téléchargement dans le mail

      Oui, merci Eolia. Au final j'ai ajouté un petit texte dans le mail car le client ne va pas obligatoirement penser à tout cela vu que le clic n'affiche aucun message avec Gogol :-)

      posté dans Discussion générale
      C
      camille
    • RE: [RESOLU]RGPD

      J'ai trouvé ! Un module de personnalisation du formulaire de contact qui le bloquait. Une fois désinstallé, la popup fonctionne !

      posté dans Modules
      C
      camille
    • RE: [RESOLU]RGPD

      bon, j'ai trouvé le fichier js cookie_consent. Et en fait, il n'est pas chargé, je ne le vois pas dans les sources.
      Je me rappelle avoir vu à un moment une page disant ce qu'il fallait faire sur le thème bootstrap (que je n'ai pas mis à jour quand j'ai updaté vers Phenix) mais je ne retrouve plus cette page.

      posté dans Modules
      C
      camille
    • RE: [RESOLU]RGPD

      Bonjour,
      Je reviens avec mon souci RGPD pour lequel je n'ai pas encore trouvé de solution. Donc le bouton est installé mais, quand je regarde le code ave l'inspecteur, celui de la popup est manquant. Je ne vois pas où c'est géré.
      Quelqu'un pourrait me donner une piste ?

      Merci d'avance

      posté dans Modules
      C
      camille
    • RE: [RESOLU]Lien téléchargement dans le mail

      Merci Eolia,
      Gmail mais aussi le webmail de Free. Par contre, dans Edge, il affiche le téléchargement mais le bloque, on peut le forcer. Dans Mozilla, il accepte le téléchargement sans souci. J'ai vérifié le spf etc sur mail-tester. Manifestement, le fait d'avoir un lien de téléchargement bloque (ce mail est mis dans les spams alors que pas ceux de confirmation de commande, etc). De plus le serveur d'O2Switch est blacklisté sur 1 liste noire.
      J'ai aussi veillé à mettre en adresse mail du site une adresse avec le même domaine.

      posté dans Discussion générale
      C
      camille
    • RE: [RESOLU]Lien téléchargement dans le mail

      Bonjour,
      Ma vue baisse j'ai bien sûr trouvé le bouton HtmlPurifier. Mais même en l'activant, le lien ne fonctionne pas dans le mail. Mais en fait, ce n'est qu'avec Google. Avec Mozilla, cela fonctionne. Il y aurait moyen de régler cela ?
      Merci

      posté dans Discussion générale
      C
      camille