Réécrire un model natif Magento (Rewrite)

Voici un petite article en attendant le prochain qui est un peu plus long à rédiger sur les Events et les Observers sous Magento.

Modifier un model existant

Dans le dernier tutoriel, je vous ai appris à modifier le comportement d'un block natif magento. Parfois il est nécéssaire de modifier un comportement qui se trouve dans une classe du Model, nous allons voir comment faire cette opération dans ce tutoriel.

Comment faire pour réécrire un model ?

Reprenons le module Myproduct et étendons la classe du Model qui représente les clients à savoir la classe Mage_Customer_Model_Customer afin de changer la fonction getName().
Sur magento, lors qu'un objet à un attribut on peut l'appeler directement avec la méthode getXXX (ou XXX est votre attribut). Par exemple le customer à par exemple un attribut "firstname", on peut donc faire getData('firstname') ou getFirstname()..c'est la même chose. La différence est qu'en utilisant getData('firstname'), on récupére directement la valeur name de l'objet, sans faire de traitement. Si j'utilise getFirstname(), je peux transformer cette valeur si besoin comme dans la surcharge suivante :

class Pfay_Myproduct_Model_Customer extends Mage_Customer_Model_Customer
{
  public function getName()
  {
	$name = '';
	if ($this->getPrefix()) {
	    $name .= $this->getPrefix() . ' ';
	}
	$name .= $this->getFirstname();
	if ($this->getMiddlename()) {
	    $name .= ' ' . $this->getMiddlename();
	}
	$name .=  ' ' . $this->getLastname();
	if ($this->getSuffix()) {
	    $name .= ' ' . $this->getSuffix();
	}
	return $name.'22222222';
  }
}

Comme avec le bloc, on crée un Model qu'on va déclarer dans notre config.xml comme d'habitude et celui ci étends la classe qu'on veut modifier à savoir : Mage_Customer_Model_Customer. Afin de prévenir magento qu'il devra prendre notre nouvel objet plutôt que l'ancien voici ce qu'on va déclarer dans <global> dans le config.xml :

  <models>
    <customer>
      <rewrite>
        <product>Pfay_Myproduct_Model_Customer</product>
      </rewrite>
    </customer>
  </models>
  
maintenant, si vous utilisez votre method getName() sur un objet de type Customer, vous allez avoir la chaine « 22222222 » après le nom. Il prend donc bien notre nouvelle méthode à la place de l'ancienne. Ceci est un exemple pour vous montrer qu’on peu faire une modification d’un Model facilement, cet exemple ne sert à rien comme ca mais il est facile a comprendre ;)

Conclusion:
Et voila ! Vous savez maintenant réécrire un Model ;) Comme d’habitude, N’hésitez pas à laisser vos questions en commentaire et à télécharger le code de ce tutoriel si vous n'arrivez pas à réecrire un model afin de comparer mon code avec le votre et voir ou il y a des différences.
Documents disponibles pour cet article :
Questions sur cette leçon
Pas de questions pour cette leçon. Soyez le premier !

Vous devez etre connecté pour demander de l'aide sur une leçon.