Jump to content

[Résolu] Surcharge classes ne fonctionne pas


Recommended Posts

Bonjour,

 

Je débute sur prestashop. J'ai grosso-merdo compris le fonctionnement. Donc pour aller plus loin, je souhaite créer une nouveau HOOK (position) et un nouveau module que je grefferais dessus.

 

J'ai réussi à tout faire :

• insertion HOOK en base (absoluteFooter)

• création du module (blockretourtop)

• admin, je peux installer / désinstaller / greffer le module etc.

 

Pour le dire autrement, ça fonctionne nikel si je le fais sans SURCHARGE OVERIDE.

 

Souhaitant faire les choses le plus proprement possible, je souhaite donc faire la même chose mais en utilisant la SURCHARGE sur une classe. Donc les deux fichiers qui posent soucis sont le fichier de base frontController.php et le fichier /override/classes/frontController.php.

 

Tout d'abord, sur les fofos, beaucoup disent que le fichier /override/classes/frontController.php n'existe pas alors que pour moi, j'ai un fichier rempli à rabord sans y avoir touché.

Ensuite, j'ai suivi les tutos et j'ai fais la chose suivante :

• mon fichier fontController.php ne change pas.

• dans mon fichier /override/classes/frontController.php, je mets cela :

 

if (!self::$initialized)
 parent::init();
 self::$smarty->assign(array(
  'HOOK_ABSOLUTE_FOOTER' => Module::hookExec('absoluteFooter')
 ));
 return parent::displayFooter();

 

Sachant que mon fichier /override/classes/frontController.php contenait déjà :

public function displayFooter()
{
 // J'AI RAJOUTE LE CODE ICI

 global $start_time;

 if (self::$_footer)
  parent::displayFooter();

 if (!$this->ini_get_display_errors())
  return;

 $this->_memory[6] = memory_get_usage();
 $this->_time[6] = microtime(true);
...
}

 

En espérant avoir été assez clair. J'attends un retour s'il vous plait.

 

Bien à vous.

 

Patrice

Edited by ritepac (see edit history)
Link to comment
Share on other sites

Pour compléter mes dires. La solution qui fonctionne sans surcharge dan sle fichier frontController.php est la suivante :

public function displayFooter()
{
 if (!self::$initialized)
  $this->init();
 self::$smarty->assign(array(
  'HOOK_RIGHT_COLUMN' => Module::hookExec('rightColumn', array('cart' => self::$cart)),
  'HOOK_FOOTER' => Module::hookExec('footer'),
  'HOOK_ABSOLUTE_FOOTER' => Module::hookExec('absoluteFooter'),
'content_only' => (int)(Tools::getValue('content_only'))));
 self::$smarty->display(_PS_THEME_DIR_.'footer.tpl');
 //live edit
 if (Tools::isSubmit('live_edit') AND $ad = Tools::getValue('ad') AND (Tools::getValue('liveToken') == sha1(Tools::getValue('ad')._COOKIE_KEY_)))
 {
  self::$smarty->assign(array('ad' => $ad, 'live_edit' => true));
  self::$smarty->display(_PS_ALL_THEMES_DIR_.'live_edit.tpl');
 }
 else
  Tools::displayError();
}

Link to comment
Share on other sites

Bonjour,

essayez ainsi :

<?php

class FrontController extendsFrontControllerCore
{  
public function displayFooter() { ........}
}

Et attention de ne pas confondre, dans le dossier override/classes :

_FrontController.php

et

FrontController.php

Link to comment
Share on other sites

Bonjour, Hedrad :D

 

Alors autant pour moi, ma première grosse erreur a été de confondre _FrontController.php et FrontController.php.

J'ai fais la modificiation :

• j'ai créé fichier FrontController.php qui se présente ainsi :

 


<?php
class FrontController extends FrontControllerCore 
{
public function displayFooter()
{

if (!self::$initialized)
$this->init();

self::$smarty->assign(array(
'HOOK_ABSOLUTE_FOOTER' => Module::hookExec('absoluteFooter')
));
return parent::displayFooter();
}
}

 

et du coup dans mon fichier de base FrontController.php (avant surcharge), j'ai :

public function displayFooter()
{
 if (!self::$initialized)
  $this->init();
 self::$smarty->assign(array(
  'HOOK_RIGHT_COLUMN' => Module::hookExec('rightColumn', array('cart' => self::$cart)),
  'HOOK_FOOTER' => Module::hookExec('footer'),
  'content_only' => (int)(Tools::getValue('content_only'))));
 self::$smarty->display(_PS_THEME_DIR_.'footer.tpl');
 //live edit
 if (Tools::isSubmit('live_edit') AND $ad = Tools::getValue('ad') AND (Tools::getValue('liveToken') == sha1(Tools::getValue('ad')._COOKIE_KEY_)))
 {
  self::$smarty->assign(array('ad' => $ad, 'live_edit' => true));
  self::$smarty->display(_PS_ALL_THEMES_DIR_.'live_edit.tpl');
 }
 else
  Tools::displayError();
}

 

J'ai juste ajouter la ligne ABSOLUTE FOOTER qui m'intéresse.

 

Il me mets en bas de la page une erreur. J'attends que la page soit de nouveau accessible pour te fournir l'erreur.

Link to comment
Share on other sites

Merci de ton attention Hedrad.

Bon là c'est la panade car le site ne s'affiche plus du tout. Il me met :

Erreur 101 (net::ERR_CONNECTION_RESET) : La connexion a été réinitialisée

 

Alors que j'ai annuler les modifs sur le fichier _FrontController.php (au tout début quand je m'étais trompé de fichier) et aussi la surcharge... :/

 

Je ne sais pas comment récupérer mon site Oo. Une idée ?

Link to comment
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...