aide prestashop PhenixSuite Help
    • Catégories
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Recherche
    • S'inscrire
    • Se connecter

    [REGLÉ] override - je n'y arrive pas.

    Planifier Épinglé Verrouillé Déplacé Modules
    10 Messages 2 Publieurs 415 Vues 2 Watching
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • herve_02H Hors-ligne
      herve_02
      dernière édition par herve_02

      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.

      herve_02H 1 réponse Dernière réponse Répondre Citer 0
      • herve_02H Hors-ligne
        herve_02 @herve_02
        dernière édition par

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

        herve_02H 1 réponse Dernière réponse Répondre Citer 0
        • herve_02H Hors-ligne
          herve_02 @herve_02
          dernière édition par herve_02

          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.

          eoliaE 1 réponse Dernière réponse Répondre Citer 0
          • eoliaE Hors-ligne
            eolia @herve_02
            dernière édition par

            @herve_02 a dit dans [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.

            Non, inutile de toucher au module.
            Il y a un fichier readme_override.txt dans le répertoire /override:

            Bonjour,
            
            Veuillez lire la documentation avant d'essayer de remplacer quelque chose ici.
            http://doc.prestashop.com/display/PS16/Overriding+default+behaviors
            
            Question fréquemment posée:
            
            Q: J'ai ajouté un override (classe ou contrôleur) mais il semble être ignoré par PrestaShop
            R: Vous devez déclencher la régénération du cache des fichiers de classe. Cela se fait simplement en supprimant le fichier /cache/classes/index.php. Il en est de même lors de la suppression manuelle d'un override : pour rétablir le comportement par défaut, vous devez supprimer le fichier /cache/classes/index.php.
            

            Créateur de PhenixSuite. Pour plus d'infos : https://eoliashop.com

            herve_02H 1 réponse Dernière réponse Répondre Citer 0
            • herve_02H Hors-ligne
              herve_02 @eolia
              dernière édition par herve_02

              @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 ?

              1 réponse Dernière réponse Répondre Citer 0
              • eoliaE Hors-ligne
                eolia
                dernière édition par

                Oui, dans un Prestashop de base, c'est cache/class_index.php mais PhenixSuite a amélioré la gestion du cache des classes et pour ne pas interférer avec des rétrocompats possible nous avons tout déplacé dans /cache/classes/
                Le fichier index des classes et overrides s'appelle donc index.php.

                Vous pouvez également utiliser la fonction, en haut à droite, dans Paramètres avancés => Performances : Vider le cache. Le fichier index.php sera supprimé ainsi que toutes les compilations smarty.

                @herve_02 a dit dans [REGLÉ] override - je n'y arrive pas. :

                -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.
                Oui, c'est la bonne méthode.

                Créateur de PhenixSuite. Pour plus d'infos : https://eoliashop.com

                herve_02H 1 réponse Dernière réponse Répondre Citer 0
                • herve_02H Hors-ligne
                  herve_02 @eolia
                  dernière édition par

                  @eolia

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

                  😉

                  herve_02H 1 réponse Dernière réponse Répondre Citer 0
                  • herve_02H Hors-ligne
                    herve_02 @herve_02
                    dernière édition par

                    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"

                    1 réponse Dernière réponse Répondre Citer 0
                    • eoliaE Hors-ligne
                      eolia
                      dernière édition par

                      1 - Bruno s'en tamponne le coquillard depuis qu'il a vendu Presta aux italiens
                      2 - Webaxx est le champion de la bidouille

                      Un des buts de Phenix est de pouvoir se passer de tous ses modules qui s'empilent mais on ne pourra jamais prévoir tous les cas de figure.

                      Ajouter une colonne en bdd c'est un override de 4 lignes dans la classe liée

                      <?php
                      class Product extends ProductCore
                      {
                          public $my_new_column;
                      
                          public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)
                          {
                              self::$definition['fields']['my_new_column'] = array('type' => self::TYPE_INT, 'shop' => true, 'validate' => 'isUnsignedId');
                              
                              parent::__construct($id_product, $full, $id_lang, $id_shop, $context);
                          } 
                      }
                      

                      Après vous pouvez écrire un module qui s'occupe de gérer vos overrides et listes (il y a des hooks pour ça: actionAdminOrdersListingFieldsModifier par exemple.

                          public function hookActionAdminOrdersListingFieldsModifier(array $params)
                          {
                              // If hook is called in AdminController::processFilter() we have to check existence
                              if (isset($this->params['select'])) {
                                  $this->params['select'] .= ', a.`my_new_column`';
                              }
                      
                              if (!array_key_exists('my_new_column', $this->params['fields'])) {
                                  $tmp_params = $this->params['fields'];
                                  $this->params['fields'] = [];
                                  $prev_key = '';
                                  foreach ($tmp_params as $key => $tmp_param) {
                                      if ($prev_key === "reference") {
                                          $this->params['fields']['my_new_column'] = [
                                              'title' => $this->module->l('Nom de ma Colonne'),
                                              'align' => 'text-center',
                                              'class' => 'fixed-width-xs',
                                              'filter_key' => 'a!my_new_column',
                                              'order_key' => 'a!my_new_column',
                                          ];
                                      }
                      
                                      $this->params['fields'] += [
                                          $key => $tmp_param
                                      ];
                                      $prev_key = $key;
                                  }
                              }
                          }
                      

                      Créateur de PhenixSuite. Pour plus d'infos : https://eoliashop.com

                      herve_02H 1 réponse Dernière réponse Répondre Citer 0
                      • herve_02H Hors-ligne
                        herve_02 @eolia
                        dernière édition par

                        @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.

                        1 réponse Dernière réponse Répondre Citer 0
                        • Premier message
                          Dernier message
                        bug
                        26 sujets
                        1.6
                        24 sujets
                        front-office
                        11 sujets
                        1.5
                        8 sujets
                        1.7
                        5 sujets
                        système
                        4 sujets
                        administration
                        3 sujets
                        hack
                        3 sujets
                        module
                        3 sujets
                        performance
                        3 sujets
                        smtp
                        3 sujets
                        transporteurs
                        3 sujets
                        dashboard
                        2 sujets
                        https
                        2 sujets
                        paypal
                        2 sujets
                        promotions
                        2 sujets