Navigation

    aide prestashop

    PrestaHelp

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

    Messages postés par herve_02

    • RE: Solutions de paiement...

      @eolia

      cooollll

      de toute façon tout sera mieux que le presta 1.7.7.x qui gère la boutique actuelle. Le BO est cassé en mille morceaux (il parait que la migration 1.4 -> 1.7.7 a été violente et douloureuse... peut être plus de 20 modules de tous zorizons) parfois lorsque l'on active ou désactive un module, on arrive sur une page .json pour faire tomber en marche comme je voulais la nouvelle version de paypal (oui je suis un malade mental d'avoir mis a jour un module sur une boutique au BO un peu cassé (il manque des icones cela casse toute la mise en page, il faut plus de 10 secondes pour acceder à une page de config) donc pour le faire tomber en marche j'ai du lire du code et taper directement dans ps_configuration et tenter de trouver les bonnes variables.

      tout le reste sera un parcours de santé

      ;-)

      posté dans Discussion générale
      H
      herve_02
    • RE: Petit code pour les descriptions de produits

      @eolia

      Oui on n'aura plus les balises mais on aura perdu la "sémantique", ce qui est un bien grand mot puisque ce n'est que de la mise en forme pour le cas du CD si tout le temps on a
      cd
      titre
      titre

      C'est facile mais ce n'est pas toujours le cas.. je vais m'arracher les cheveux (ce qu'il en reste)

      Disons que le l'on peut faire des "modèles" et utiliser 'ou pas' les modèles. Ceux qui vendent des cd, des dvd, des produits dérivés, peut faire un modèle cd, un modèle dvd et laisser le reste en "normal" ensuite si on fait tourner et qu'il n'y a rien à faire on a juste un return après le document.querySelectorAll(tag) s'il ne ramène rien, vue comment presta tourne, cela ne se verra même pas.

      je vais le mettre en œuvre sur notre boutique. je vais "hardcoder" dans le javascript la mise en forme et la récup des tags et laisser le javascript dans le bon dossier d'un module product par exemple. cela devrait le faire ;-)

      L'avantage de cela est qu'il est moins chronophage de rentrer ses produits et cela "oblige" à être sémantique. on est certains d'avoir la même mise en forme partout. c'est un peu du html sémantique

      posté dans Discussion générale
      H
      herve_02
    • Petit code pour les descriptions de produits

      bonjour,
      je vous livre mon petit code (sous licence WTFL) mais j'aimerais bien qu'il ne soit pas à la base d'un module payant.

      Historique du pourquoi.

      Je travaille sur un prestashop d'un client-ami, sa migration de 1.7.7 vers phenix suite. ET (sinon ce n'est pas drôle) je doit mettre en place un crm pour gérer diverses choses comme la facturation, les droits d'auteurs et autres joyeuseté.

      Il a été convenu d'utiliser le crm (tryton pour être précis - parce que je le connais un peu, j'avais développé il y a plus de 10 ans un produit pour un esat basé sur openerp.), le crm comme base arrière. en clair : tout est sur le crm et phenixsuite est juste consacré à la vente. Je suis largement plus à l'aise à "développer " (bien grand mot) sur tryton que sur presta/phenix. Oui je suis long.

      Et donc je dois récupérer toutes les infos de presta pour les passer sur tryton. (et accessoirement son ancien logiciel de gestion des droits) Et lors de la récup-traitment-import des produits je me suis aperçu que pour les cd, on avait le droit à des choses comme ça

      <p style="text-align: left;"> </p>
      <p style="text-align: center;"><span style="font-size: 12pt; color: #800000;"><strong>Contenu du CD</strong></span></p>
      <p style="text-align: left;"> </p>
      <p style="text-align: left;"><strong><span style="color: #800000;">1. Chacha Latino</span></strong>  2'56</p>
      

      j'ai abrégé. donc dans la base de donnée il y a ET des infos ET de la mise en forme. Beaucoup de bruit (outre la difficulté à récupérer avec du csv entre les sauts de ligne et les fins de lignes...) mais c'est un détail.
      Cela veut dire qu'à CHAQUE fois on doit entrer tout le décorum html dans la base et donc avec la mise en forme. (même si on peut css-er une bonne partie.)

      Et comme je suis un rationaliste tétu et entêté. je me suis dit, ce serait vachement plus cool de rentrer un truc comme ça

      <cd titre="Le bal musette en france du 18ème siècle" auteurs="Duchmol Jean yves & josette Pierre" duree="45'32">
      <piste no="1" duree="3'45" titre=" Ah le petit vin blanc"/>
      <piste no="2" duree="2'58" titre=" Il est des nôtres"/>
      </cd> 
      <cd titre="Le bal musette en france du 19ème siècle" auteurs="Lataupe rené & the crazy fogg" duree="45'32">
      <piste no="1" duree="3'45" titre=" Il faut le voir"/>
      <piste no="2" duree="2'58" titre=" Pour le croire"/>
      </cd>
      

      et gérer son affichage. alors j'ai un peu taffé et écrit quelques lignes de plain javascript, que les puristes trouveront peut être horrible. (n'hésitez pas à proposer des améliorations)

      <script>
      window.onload	= function (){
      do_convert('cd');
      }
      
      var dF = document.createDocumentFragment();
      // dans cds le 1 est l'attribut du tag du cd, le 2 le tag a créer et le 3 la la classe du tag créé
      const cds=[['titre','h3','vert jaune'],['auteurs','h4',''],['duree','h5','']];
      // idem dessus sans style (facile à rajouter) comme on parcours ces array
      // le ['','br',''] permet un saut de ligne
      const tis=[['no','span',''],['titre','span',''],['duree','span',''],['','br','']];
      
      function $$(t,e){
      	if (!e) return document.querySelectorAll(t);
      	else return e.querySelectorAll(t);
      }
      
      function do_liste(what,item){
      for (const el of item) {
      	my_tag=document.createElement(el[1]);
      	if (el[0])  my_tag.textContent= what.attributes[el[0]].value;
      	if (el[2])  my_tag.className=el[2];
      	dF.appendChild(my_tag);
      	}
      }
      
      function do_convert(t){
      let list_cd=$$(t);
      if (list_cd.length<1) return;
      for(var i = 0; i < list_cd.length; i++) {
      	do_liste(list_cd[i],cds)
      	let list_titres=$$('piste',list_cd[i]);
      	for(var j = 0; j < list_titres.length; j++) {
      		do_liste(list_titres[j],tis)
      	}
      list_cd[i].replaceWith(dF);
      }
      }
      </script>
      

      le code est simpliste, je ne vais pas vous faire l'affront de le commenter. J'ai mis des balises html pour le voir tomber en marche. Il n'a pas besoin des sauts de ligne dans les éléments et, par nature, les <cd></cd> et <piste/> ne sont pas affichés et ensuite remplacé par le code fabriqué pour le plain javascript. On est certain du coup d'avoir partout la même présentation mise en forme te on gagne beaucoup de temps à saisir les trucs.

      je ne l'ai pas encore mis dans phenix, je suis juste en phase de construction de l'ensemble.

      j'espère que cela donnera des idées et aidera certains.

      posté dans Discussion générale
      H
      herve_02
    • RE: Solutions de paiement...

      Finalement on a choisit sumup, le mode était installable, le client avait déjà un compte . Il trouve que c'est le moins cher pour lui.

      posté dans Discussion générale
      H
      herve_02
    • Solutions de paiement...

      Bonjour,
      j'ai un peu écumé les fora suite à la demande d'un client-ami qui veut partir de sa banque je ne sais pas trop pourquoi.
      Il aimerait bien que paypal gère tout. J'ai lu un topic (que je ne retrouve plus) qui expliquait que la solution paypal "canal historique" ne proposait pas la carte bancaire sans compte pour des paiements depuis un mobile. Il existe pour cela prestashop checkout. je me souviens avoir lu que le module était assez intrusif et qu'il nous liait avec prestashop (ce qu'on trouve moyen) mais si pas d'autres solutions...

      il y a le module paypal-enhanced de eolia mais cela reste comme le module paypal classique avec ce trou dans la raquette. la boutique en ligne fait dans les 50 000 euros par an (les marges ne sont pas élevés) et il y a des ventes hors UE et hors europe...

      qu'est-ce qui serait conseillé d'après vous. C'est vrai que la solution chechout de paypal est attirante car elle bouche le fameux trou...

      posté dans Discussion générale
      H
      herve_02
    • blockcategory et left_column

      Bon, cela fait quelques temps que je rame dessus et j'ai trouvé une piste peut être?

      j'ai activé le blockcategory dans mon hook_left_column. MAIS il ne s'affiche pas à la première visite , il faut choisir un produit et revenir pour qu'il reste affiché. Certains pensent que cela vient du cache navigateur, mais mes test semblent montrer que non. vider le cache navigateur, partir d'une nouvelle session.... vider les cokkies... vider le cache smarty... la totale

      Donc je lis le code.. schématisons

      public function hookLeftColumn($params)
          {
      				
              if(!$this->setLastVisitedCategory()) {
                  return;
              }
              $phpself = $this->context->controller->php_self;
              $current_allowed_controllers = array('category');
      
      blablabla
      }
      

      Si je commente ce return, elle s'affiche comme désiré. Mais disons que j'hésite à faire le bourrinr, je vais plus loin...

      public function setLastVisitedCategory()
          {
              if(method_exists($this->context->controller, 'getCategory')
                  && ($category = $this->context->controller->getCategory())
              ) {
                  if(!$category->active) { // c'est pas le bon controller donc on passe à la suite
                      return false;  
                  }
              }
       $cache_id = 'blockcategories::setLastVisitedCategory'; // normalement vide
              if(!Cache::isStored($cache_id)) {
                  if(method_exists($this->context->controller, 'getCategory') // probablement pas
                      && ($category = $this->context->controller->getCategory())
                  ) {
                      $this->context->cookie->last_visited_category = $category->id; // pas de cookie déposé
                  }
                  elseif(method_exists($this->context->controller, 'getProduct') // non plus, sauf quand
                      && ($product = $this->context->controller->getProduct())) { // on a vu une page produit
                      if(!isset($this->context->cookie->last_visited_category)
                          || !Product::idIsOnCategoryId($product->id, array(array('id_category' => $this->context->cookie->last_visited_category)))
                          || !Category::inShopStatic($this->context->cookie->last_visited_category, $this->context->shop)
                      ) { //// la il ne dépose pas de cookie
                          $this->context->cookie->last_visited_category = (int)$product->id_category_default;
                      }
                  } //// donc au saute là... ??? mais  pas de cookies non plus....
                  Cache::store($cache_id, $this->context->cookie->last_visited_category);
              }
          //// et donc pas pastèque return false... tout le temps.....
              return Cache::retrieve($cache_id);
          }
      
      }
      

      De ce que je comprends... Lorsque l'on arrive sur la page la première fois, il n'y a pas de catégorie disponible donc on demande d'activer la dernière catégorie visitée, ce qui ne donne rien et renvient rien et donc return vide....
      il n'y a pas de dépôts de cookie lors de cette navigation... je vais prendre le temps d'investiguer

      "" je ne sais pas si c'est vraie ou pas, ce navigateur de m* firefox à jour, me dit qu'il n'y pas de cookie alors même qu'il y en a puisque je me suis logué sur un site... p*tain je devrais regarder d'un autre navigateur...

      en ce moment je n'ai pas le temps de faire dans la dentelle alors je vai commenter à la bourrin, mais il faudrait se pencher plus sur la question, ce que je ferais si le soucis persiste et que personne ne voit la solution évidente.

      posté dans BUG connus
      H
      herve_02
    • RE: [REGLÉ] override - je n'y arrive pas.

      @eolia

      oui c'est pour cela que je travaille à l'ancienne mais à la mode phénix,; et si je suis "chiant" c'est parce que j'aime bien faire les choses et je préfère demander le temps que j'acquiers l'expérience de bien faire, pour peut être, qui sait proposer aussi du code à reverser.

      là je travaille dans mon coin à ajouter une barre de catégorie en horizontal, sans faire de module mais en utilisant le module blockcatégorie du thème de base. avec le moins de modifs possibles... ensuite je viendrais me faire humilier ici en expàosant ce que j'ai fait ;-)

      en tout cas largement merci du code que je vais étudier avec la révérence d'un padawan, ce qui va me permettre de gagner de longues heures ;-)

      j'ai aussi commandé un bouquin bootstrap et jquery....

      lorsque j'avais fait mon site de suivi d'instruction en famille j'avais codé tout seul mon ajax, mais à rome on fait comme les romains.

      posté dans Modules
      H
      herve_02
    • RE: [REGLÉ] override - je n'y arrive pas.

      en zonant sur internet je suis tombé sur ça... j'ai envie de pleurer devant tant de bêtise.....

      https://www.webbax.ch/2022/03/10/prestashop-ajouter-champ-fiche-produit/

      la première est ça :

      a) il était préférable d’acheter un module qui fait le travail où tout le développement a déjà été effectué en amont. Certes on achète le module, mais on obtient un gain de temps d’implémentation et plus de confort à l’utilisation…

      qui est une démonstration que le produit n'est pas adapté à un commerçant, mais à un vendeur pour commerçant. pas certain que Bruno Lévêque, soit enchanté de cela.

      la seconde.... est le thème même de l'article

      b) Et en prenant cette approche de manière assez amusante, je suis arrivé à une conclusion que je pouvais détourner toutes les règles habituelles en me servant d’un fichier externe CSV qui pourrait être piloté à la main, sans faire aucun changement dans des fichiers PHP tout en me limitant uniquement au template de Smarty.

      je suis ébahie que le mec n'a même pas honte d’écrire ça. et il se dit, attention du peu, "Expert PrestaShop"

      posté dans Modules
      H
      herve_02
    • RE: [REGLÉ] override - je n'y arrive pas.

      @eolia

      merci j'utilise tout le temps vider le cache...

      ;-)

      posté dans Modules
      H
      herve_02
    • RE: [REGLÉ] override - je n'y arrive pas.

      @eolia

      Alors, les docs de prestashop sont plutôt compliquées car pas complète. on dirait qu'elles sont écrites pour que celui qui écrit se souviennent de ce qu'il a fait. Et celui qui veut comprendre (j'ai lu la une large partie de la doc en suivant le lien que j'avais trouvé avant même d'ouvrir un éditeur de texte - je suis un homme de la doc) en partant de zéro, c'est assez compliqué.

      Ensuite ceux qui ont écrit la doc se sont débrouillé pour que le lien clickable me (je suis peut être pas doué) redirige vers la page d'accueil. et donc il est particulièrement chiant de retrouver une référence et pour mopi, plus aucun lien vers la dic "officielle" ne fonctionne.

      J'ai acheté 2 bouquins dont celui de serny et j'y trouve largement mon compte, même si parfois je me mélange les pinceaux.

      Ensuite je cherche pas à remplacer comme largement écrit dans mon post, je veux seulement ajouter un hook au module pour permettre de faire une barre de lien supplémentaire et je trouve particulièrement contre-productif d'utiliser un module (megamenu) qui va créer une table pour y mettre les catégories afin de faire un menu, catégories qui existent déjà dans phenixsuite.

      je crois me souvenir (il était tard ce main) que ce fichier n'existait pas ou alors je ne l'ai pas trouvé, mais j'ai tous les réglages à pas de cache. parce que c'est la première chose que j'avais regardé mais je pense me souvenir que j’avais lu que le fichier s'appelait classe_index.php ou quelque chose comme cela et je ne l'ai pas trouvé. je dois avouer que si le fichier index.php existe dans le répertour de cache, je ne l'ai même pas regardé car dans tout prestashop le fichier index est un fichier "vide" (juste une redirection) pour pallier ce soucis de conception que chaque répertoire accessible du net du logiciel ne possède pas par défaut un fichier index.php alors que la conception même d'un serveur de fichier internet (comme apache) recherche par défaut ce fichier en tout premier lieu s'il n'a pas une uri complète vers un fichier à servir.

      Maintenant j'ai bien conscience que ma manière de faire est probablement pas "prestashopienne" et je sais que dans le futur assez proche je serais amené à ré-écrire une partie de ce que je fais maintenant car même si c'est "tombé" en marche", c'est probablement largfemetn sous-optimal.

      Alors je pourrais faire à l'ancienne et écrire du code html statique dans un des fichiers tpl, puisque ce menu ne bougera pas, mais j'ai voulu le faire à la mode prestashop/phenixsuite. parce que je veux que les mises à jours se passent bien.

      Maintenant comme je suis à cheval sur 3 serveur - celui en production avec 1.7.xx, le futur en prod avec phenixsuite 1.6.30 ou je ne monte que ce qui marche et mon serveur home de travail, tous en ligne de commande dans un terminal il est possible que je n'ai pas regardé le bon serveur.

      J'en profite pour poser une question qui me taraude....

      Lorsque je veux un changement "simple" par exemple ajouter un champ au fiches produits (par exemple un 'résumé')
      -a) La possibilité "simple" est de l'ajouter dans la terminal mariadb, le remplir avec une requete insert et mofdier la vue et le formulaire d'admin.
      -b) la possibilité qui me semble la plus prestashopienne : faire des ovverrides pour modifier juste ce que j'ai changé/modifier comme dans le code proposé au dessus.
      c) - la possibilité de recul serait de faire un module qui ajoute cela en le "hookant" au même endroit....
      d) - la possibilité la plus répandue est d'acheter un module (je trouve l'univers de prestashop assez désagréable ou on a l'impression que tout est compliqué pour permettre de vendre des modules dont une bonne partie doit être si on regarde bien de sacrées merdes

      J'ai bien compris que le a est une impasse qui sera cassée à la mise à jour.

      Mais je crois me souvenir avoir lu un truc ou vous disiez que les overrides ce n'était pas une bonne idée. alors est-ce que l'override "bourrin" (je prends tout le code pour de petits modifications) est une mauvaise idée ou même un override qui ajoute 2 lignes est aussi une mauvaise idée ?

      posté dans Modules
      H
      herve_02
    • RE: [REGLÉ] override - je n'y arrive pas.

      je vais me fouetter, j'ai vu mon erreur (mic-mac dans le nom de la classe/module)

      cela marche, mais il faut installer-désisntaller le module, le réinitialiser seulement ne fonctionne pas.

      posté dans Modules
      H
      herve_02
    • RE: [REGLÉ] override - je n'y arrive pas.

      peut être que in fine je ferrais un module avec tous mes overrides s'il y en a beaucoup.

      posté dans Modules
      H
      herve_02
    • [REGLÉ] override - je n'y arrive pas.

      Bonjour plutôt que de créer un nouveau module, juste pour ajouter la possibilité d'accrocher le blockcatégorie au hookdisplayTop.

      je me suis dis faisons un override. je ne veux pas écrire directement

      && $this->registerHook('displayTop')
      

      dans le module orgiginal, sinon il faudra que je change à la main à chaque mise à jour et le jour ou ce n'est plus moi aux commandes (un camion, toussa) le truc sera perdu pour le suivant.

      donc je tente d'écrire un "override" que je pose directement comme un goret dans le dossier override de phénixsuite. (je ne veux pas faire de module)
      avec ce code minimal qui me semble simple (livre de serny et doc et forums sur interne)

      # fichier override/modules/blockcategories
      
      class ProductsCategoryOverride extends ProductsCategory
      {
      
      public function install()
      	{
      			return (parent::install()
      			&& $this->registerHook('displayTop')
      		);
      	}
      public function hookDisplayTop($params)
      	{
      		return '<div class="header_user_info"><a>Test</a></div>';
      		// return $this->display(__FILE__, 'nav.tpl');
      	}
      }
      

      et la le phenix me jette avec un peu améne

      Fatal error: Uncaught Error: Class "ProductsCategory" not found in mon fichier

      je me voyais déjà en haut de la fiche... mais patatras je retombe sur terre.

      posté dans Modules
      H
      herve_02
    • RE: les routes sur mesures

      @doekia

      oui, il y a un soucis parce que le bouquin que j'ai ne me propose QUE la route pour son propre module.

      Je voulais réécrire la route du contrôleur contact qui est par défaut
      https://site.com/index.php?controller=contact
      en
      https://site.com/contact.

      je me suis attaqué (un peu en dilettante, mais pas trop) à celui-ci car j'ai monté un micro-module qui donne des informatisations de contacts et qui propose un lien vers le contrôleur de contact "officiel" de phenixsuite. et je tentais de bidouiller pour le faire tomber en marche.

      mon arrière pensée est que lorsque je ferais la migration du site, je veux que les url-friendly de prestashop 1.7.7.3 (oui j'ai un coté mazo, je travaille sur un backport d'un presta 1.7.3 (ou 1.7.7.3) vers phenix suite, prestat 1.7.3 qui était une migration dans la douleur d'un presta1.4), mais c'est pour un ami et plutôt que de migrer dans l'extrême douleur vers presta 8 et bientôt 9 dans l’univers incertain de prestashop, j'ai préféré le pousser vers phenix suite. et donc je me dois de devenir compétent dans la chose. D’où mon "apprentissage" par talonnement.

      En plus le bougre veux un "identique", ce qui me fait m'arracher les cheveux....8000 lignes de global.css, moi qui avait l'habitude de monter hml/css/javascript/php à la main mes yeux pleurent des larmes de sang :-)

      Mais j'ai survolé rapidement le tuto en question, parce que j'ai plus les yeux en face des trous, et je crois que je tenterais cela demain pour voir si j'avance dans la compréhension..

      posté dans Discussion générale
      H
      herve_02
    • RE: les routes sur mesures

      je ne suis pas certain, mais je crois que ce topic répondra à mes questions

      https://bb.enter-solutions.net/topic/1114/créer-un-contrôleur-front-indépendant

      désolé pour le bruit

      posté dans Discussion générale
      H
      herve_02
    • RE: Nouvelle attaque ?

      @RPro a dit dans Nouvelle attaque ? :

      eval/Designed with utility, safety and style/($table_prefix($wp_content));

      Cela ressemble pas mal à une attaque pour wordpress.

      posté dans Discussion générale
      H
      herve_02
    • les routes sur mesures

      J'aimerais faire une route sur mesure, mais je ne sais pas ou chercher, j'ai bien la doc qui l'explique pour un module mais cela ne semble pas marcher pour un controleur, un truc du style là:

      https://stackoverflow.com/questions/35819102/module-route-with-rewrite-redirect-to-product-on-prestahop

      j'ai cru comprendre

      1. que l'on pourrait overwrite le contrôleur contact (mais que c'est pas forcement une bonne pratique) car les mises à jour ne fonctionneraient/se verraient pas.
      2. je crois que l'on pourrait ajouter directement dans le contrôleurs (mais je ne sais pas encore comment) mais la aussi à la mise à jour, cela casse.
      3. j'ai crue lire qu'on pourrait décorer le contrôleur, mais cela ne marche pas.

      class FormocontactContactControllerCore extends ContactControllerCore
      {

          public function hookModuleRoutes($params)
      {
          $customRoutes = [
              'module-' . $this->name . '-contact' => [ /* forcement ça peut pas marcher*/
                  'controller' => 'contact',
                  'rule' => 'contact',
                  'keywords' => array(),
                  'params' => array(
                      'fc' => 'module',
                      'module' => $this->name,
                  ),
              ],
          ];
          return $customRoutes;
      }
      

      }

      alors je pourrais toujours le faire avec le mod rewrite d'apache, mais cela ne me permettrais pas de comprendre et le faire pour les produits.

      merci si vous aviez une piste de travail, je serais preneur.

      posté dans Discussion générale
      H
      herve_02