Jump to content
Copper

Débutant - surchage override

Recommended Posts

Bonjour à tous,

 

je débute dans la programmation sous prestashop et je patine un peu.

Je souhaite surcharger la classe product afin d'y ajouter une fonction qui retournerait la valeur du conditionnement d'un produit.

Comme je n'y arrivait pas, j'ai PROVISOIREMENT ajouté ma fonction directement dans la classe product.

J'ai ajouté à la fin du fichier

    public function getConditionnement()
    {
        return "12";
    }
   

Pour l'instant je retourne 12, juste pour avancer pas après pas.

Dans mon template je fais

{assign var="toto" value=$product->getConditionnement}

quand j'affiche toto je n'ai rien

Si je fais

{assign var="toto" value=$product->getConditionnement()}

ma page ne s'affiche plus

et si je fais

{assign var="toto" value="$product->getConditionnement()"}

ca m'affiche : Array->getConditionnement()

 

Bref, je n'arrive pas à afficher la valeur de retour de ma fonction, cad 12.

Merci d'avance pour votre aide.

 

Copper

Share this post


Link to post
Share on other sites

en tout cas, la bonne syntaxe est 

{assign var="toto" value=$product->getConditionnement()}

Quand tu dis que ta page ne s'affiche plus, c'est que tu as une page blanche ? Tu as essayé d'activer le mode debug pour en savoir plus ?

Share this post


Link to post
Share on other sites

Bonjour et merci pour ta réponse.

Alors je m'explique quand je dis que ma page ne s'affiche plus.

En fait voila le bout de code de test

aaaaaaa
{assign var="toto" value="$product->getConditionnement()"}
{$toto}
bbbbbbbbb

Et la ca m'affiche
aaaaaaa     et rien d'autre

 

Dans les autres cas ca affichait

aaaaa Array->getConditionnement()  bbbbb

PS : j'ai un doute pour ma fonction getConditionnement, il fallait bien l'ajouter PROVISOIREMENT dans /Classes/product.php ?

Share this post


Link to post
Share on other sites

Comme l'a dit Johann il faut que tu actives le mode debug.

Ensuite tu ne nous dis ni dans quel template tu te trouves, ni quelle version de PS tu utilises...

Pense à passer l'option de compilation des templates sur "Recompiler les fichiers de templates s'ils ont été mis à jour" et à vider le cache dans le menu "Paramètres avancés > Performances" aussi

Share this post


Link to post
Share on other sites

Oups, 1 000 excuses j'en oublie les bases !

 

Prestashop 1.7.2

Template de base

 

Voilà ce que donne le mode debug. Ca ne parle malheuresement pas du fichier que j'ai modié :--(

Pour info l'appel aux valeur de $product fonctionne (par exemple $product.regular_price).

 

ContextErrorException in smarty_internal_templatebase.php(157) : eval()'d code line 1104: Notice: Array to string conversion

 

  1. in smarty_internal_templatebase.php(157) : eval()'d code line 1104
  2. at ErrorHandler->handleError('8', 'Array to string conversion', '/var/www/grossiste-chaussette.com/htdocs/vendor/prestashop/smarty/sysplugins/smarty_internal_templatebase.php(157) : eval()'d code', '1104', array('_smarty_tpl' => object(Smarty_Dev_Template))) in smarty_internal_templatebase.php(157) : eval()'d code line 1104
  3. at content_5a71ee6522ac37_49037791(object(Smarty_Dev_Template)) in smarty_internal_templatebase.php(157) : eval()'d code line 318
  4. at content_5a71ee655ca987_29587639(object(Smarty_Dev_Template)) in smarty_internal_templatebase.php line 188
  5. at Smarty_Internal_TemplateBase->fetch('catalog/product.tpl', null, 'layouts/layout-full-width.tpl', null, false, true, false) in SmartyDev.php line 41
  6. at SmartyDev->fetch('catalog/product.tpl', null, 'layouts/layout-full-width.tpl') in FrontController.php line 671
  7. at FrontControllerCore->smartyOutputContent('catalog/product.tpl') in FrontController.php line 655
  8. at FrontControllerCore->display() in Controller.php line 225
  9. at ControllerCore->run() in Dispatcher.php line 379
  10. at DispatcherCore->dispatch() in index.php line 28

 

Si cela inspire quelqu'un ?

Edited by Copper (see edit history)

Share this post


Link to post
Share on other sites

Avec PS 1.7 ce que tu veux faire ne fonctionnera pas. 

Le contrôleur passe un array à la vue (au template) et plus un objet comme avant. Donc impossible d'invoquer une méthode de l'entité Product dans la vue.

Donc il faut que tu changes d’approche et que tu fasses ta modification dans le controleur   

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More