chris13 Posted November 8, 2012 Share Posted November 8, 2012 Bonjour, J'ai besoin de modifier quelques fonctions de la classe Product.php. Dans l'override, est-ce que je dois mettre toute la classe Product, ou bien simplement les fonctions à modifier ? Dans le cas d'une mise à jour, si les fonctions surchargées ont été modifiées par la team, est-ce que les nouveautés seront prises en compte ? Merci. Link to comment Share on other sites More sharing options...
Ninja Of Web Posted November 8, 2012 Share Posted November 8, 2012 Lorsque tu utilise l'override tu doit uniquement ajouter les méthode que tu veut surchargé. Pour que les modifications de la TEAM suite à un update soit prise en compte, il faut de préférence utiliser le "parent::nom_de_la_methode_surchager();" Ex: Dans classes/Product.php : public function deleteCartProducts() { return Db::getInstance()->Execute('DELETE FROM `'._DB_PREFIX_.'cart_product` WHERE `id_product` = '.(int)($this->id)); } Si tu veut surchargé uniquement cette méthode, voici le principe : Dans overrides/classes/Product.php : class Product extends ProductCore { public function deleteCartProducts() { $return = parrent::deleteCartProducts(); // Ici tu exécute ton nouveau code return $return; } } Loïc. Link to comment Share on other sites More sharing options...
Johann Posted November 8, 2012 Share Posted November 8, 2012 tu ne manques pas d'r, Loic ! il n'y en a qu'un dans "parent" Link to comment Share on other sites More sharing options...
chris13 Posted November 8, 2012 Author Share Posted November 8, 2012 Salut Ninja of Web, Merci pour ton explication. Cependant dans ton exemple la fonction deleteCartProducts() d'origine ne fait qu'une seule opération (un DELETE en bdd). Dans ce cas là effectivement il est intéressant de faire un "parent::nom_de_la_methode_surchager();" et rajouter le nouveau code à la suite. Mais les modifications apportées ne sont pas forcément à la fin de la méthode à surcharger. Elles peuvent être aussi au milieu. C'est mon cas par exemple je dois modifier la méthode productImport() de la classe AdminImportControllerCore(). Tu vois ce que je veux dire ? Link to comment Share on other sites More sharing options...
Johann Posted November 8, 2012 Share Posted November 8, 2012 Dans ce cas là, tu remplaces purement et simplement le corps de la méthode native par ton code à toi. Link to comment Share on other sites More sharing options...
chris13 Posted November 8, 2012 Author Share Posted November 8, 2012 (edited) Donc le code de la méthode native sera ignoré, et c'est mon code qui prendra le dessus n'est ce pas ? Dans le cas d'une mise à jour de cette méthode, je ne pourrais pas bénéficier des correctifs. Il faudra récupérer le nouveau code et le modifier à nouveau dans l'override. Edited November 8, 2012 by chris13 (see edit history) Link to comment Share on other sites More sharing options...
Ninja Of Web Posted November 8, 2012 Share Posted November 8, 2012 Exactement ! Si c'est bien de cette méthode que tu parle, la meilleur des solutions et de faire un copier coller de la méthode d'origine vers ton override comme le dit Johann. Essaye de rajouter le minimum de ligne dans cette méthode pour éviter les futurs conflit quand elle sera à jour... (Ex: crée de nouvelles méthodes qui ferons les modifications que tu désire) Ah cette méthode ! Je l'ai débuguer des 10ene de fois ! Bon courage ! Link to comment Share on other sites More sharing options...
chris13 Posted November 8, 2012 Author Share Posted November 8, 2012 Merci Link to comment Share on other sites More sharing options...
chris13 Posted November 12, 2012 Author Share Posted November 12, 2012 Salut, je relance le sujet car j'ai une autre question. Je suis toujours en train de modifier la classe AdminImportControllerCore. Comment dois-je faire si je veux ajouter une propriété en passant par l'override ? Link to comment Share on other sites More sharing options...
Ninja Of Web Posted November 12, 2012 Share Posted November 12, 2012 Il faut mettre tous simplement : Public $nom_de_la_propriete; Loic Link to comment Share on other sites More sharing options...
chris13 Posted November 12, 2012 Author Share Posted November 12, 2012 (edited) Merci bien Loic. Par contre quand on fait un : $product = new Product(); Comment prestashop sait s'il faut instancier la classe product d'origine ou bien celle surchargée. Je suppose que ça se passe dans l'autoload mais je ne vois pas où. Edited November 12, 2012 by chris13 (see edit history) Link to comment Share on other sites More sharing options...
chris13 Posted November 13, 2012 Author Share Posted November 13, 2012 ? Link to comment Share on other sites More sharing options...
Ninja Of Web Posted November 13, 2012 Share Posted November 13, 2012 Dslé pour le retard ! Cela va chercher les méthodes que tu appel dans l'override et ensuite dans la classe productCore. Cela ce fait automatiquement. Loic. Link to comment Share on other sites More sharing options...
chris13 Posted November 14, 2012 Author Share Posted November 14, 2012 merci Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now