<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[[1.3] Implanter des classes overrides]]></title><description><![CDATA[<p dir="auto">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.<br />
Ce mécanisme n'est apparu qu'a partir de la version 1.4 de PrestaShop.</p>
<p dir="auto">Voici une implantation de ce mécanisme sur version antérieure.</p>
<p dir="auto">Il suffit d'injecter une fonction autoloader modifié en début du fichier config.inc.php</p>
<pre><code>/* 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 &amp;&amp; $file_in_classes)
    {
      require_once($classDir.str_replace(chr(0), '', $className).'.php');
      require_once($overrideDir.$className.'.php');
    }
    elseif (!$file_in_override &amp;&amp; $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-&gt;isInterface() &amp;&amp; substr($classInfos-&gt;name, -4) == 'Core')
        eval(($classInfos-&gt;isAbstract() ? 'abstract ' : '').'class '.$className.' extends '.$className.'Core {}');
    }
    elseif ($file_in_override &amp;&amp; !$file_in_classes)
    require_once($overrideDir.$className.'.php');
  }
}
spl_autoload_register('__autoload');
</code></pre>
<p dir="auto">Créer ensuite votre répertoire /override/classes</p>
<p dir="auto">Pour toute classe que vous souhaitez modifier, changez le nom de la classe native dans son fichier pour la renommer en &lt;class&gt;Core<br />
Exemple pour la classe "Order":</p>
<pre><code>class OrderCore extends ObjectModel
</code></pre>
<p dir="auto">Puis créer votre fichier override comme dans les version ultérieures.</p>
<p dir="auto">Pratique pour normaliser tranquillement votre code en prévision d'une future migration<br />
<strong>NOTE</strong>: Lors de votre upgrade, prenez garde à la structure du répertoire classes (ex: Order.php =&gt; order/Order.php)</p>
]]></description><link>https://bb.enter-solutions.net/topic/1081/1-3-implanter-des-classes-overrides</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Apr 2026 08:07:40 GMT</lastBuildDate><atom:link href="https://bb.enter-solutions.net/topic/1081.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 16 Feb 2019 22:42:22 GMT</pubDate><ttl>60</ttl></channel></rss>