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

    [1.3] Implanter des classes overrides

    Planifier Épinglé Verrouillé Déplacé Tutoriels
    1.31.2
    1 Messages 1 Publieurs 441 Vues 1 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.
    • doekiaD Hors-ligne
      doekia
      dernière édition par eolia

      Le mécanisme des overrides est très pratique pour maintenir le coeur propre tout en ayant la capacité de faire des changements dans le code natif.
      Ce mécanisme n'est apparu qu'a partir de la version 1.4 de PrestaShop.

      Voici une implantation de ce mécanisme sur version antérieure.

      Il suffit d'injecter une fonction autoloader modifié en début du fichier config.inc.php

      /* Autoload */
      function __autoload($className)
      {
        if (function_exists('smartyAutoload') AND smartyAutoload($className))
          return true;
      
        $className = str_replace(chr(0), '', $className);
        $classDir = dirname(__FILE__).'/../classes/';
        $overrideDir = dirname(__FILE__).'/../override/classes/';
        $file_in_override = file_exists($overrideDir.$className.'.php');
        $file_in_classes = file_exists($classDir.$className.'.php');
      
        // This is a Core class and its name is the same as its declared name
        if (substr($className, -4) == 'Core')
          require_once($classDir.substr($className, 0, -4).'.php');
        else
        {
          if ($file_in_override && $file_in_classes)
          {
            require_once($classDir.str_replace(chr(0), '', $className).'.php');
            require_once($overrideDir.$className.'.php');
          }
          elseif (!$file_in_override && $file_in_classes)
          {
            require_once($classDir.str_replace(chr(0), '', $className).'.php');
            $classInfos = new ReflectionClass($className.((interface_exists($className, false) or class_exists($className, false)) ? '' : 'Core'));
            if (!$classInfos->isInterface() && substr($classInfos->name, -4) == 'Core')
              eval(($classInfos->isAbstract() ? 'abstract ' : '').'class '.$className.' extends '.$className.'Core {}');
          }
          elseif ($file_in_override && !$file_in_classes)
          require_once($overrideDir.$className.'.php');
        }
      }
      spl_autoload_register('__autoload');
      

      Créer ensuite votre répertoire /override/classes

      Pour toute classe que vous souhaitez modifier, changez le nom de la classe native dans son fichier pour la renommer en <class>Core
      Exemple pour la classe "Order":

      class OrderCore extends ObjectModel
      

      Puis créer votre fichier override comme dans les version ultérieures.

      Pratique pour normaliser tranquillement votre code en prévision d'une future migration
      NOTE: Lors de votre upgrade, prenez garde à la structure du répertoire classes (ex: Order.php => order/Order.php)

      https://store.enter-solutions.com modules, support et assistance.

      Je précise que je n'ai pas fait ni Paco-Rabane, ni Poudlard 2ème langue - je ne suis ni devin, ni magicien.
      Fournissez un maximum d'information dans vos questions, version exacte du coeur et de vos modules, si besoin un peu d'histoire sur votre shop et vos recherches, les modules tiers installés, ...

      Si mon intervention vous a aidé, n'hésitez pas à me remercier: https://ko-fi.com/A153227G

      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