Jump to content

Surcharge module dans un thème


Recommended Posts

Bonjour,

 

J'ai installé un module permettant d'intégrer un moteur à facette dans ma page. A présent je cherche à le personnaliser. Mais j'ai un soucis (si non je ne ferai pas ce post ^^)

 

J'ai suivis les instructions présentes ici. Mais ça ne prend pas en compte mes changements :/

 

J'ai vérifié les chemins :

 

/modules/pm_advancedsearch4/views/templates/hook/pm_advancedsearch_results.tpl

/themes/mytheme/modules/pm_advancedsearch4/views/templates/hook/pm_advancedsearch_results.tpl

 

 

J'ai viré le cache :/ toujours rien. J'ai fais la modif dans le .tpl du module, elle est bien prise en compte (et directement).

 

Sur de vieux tuto (de l'époque de 1.4) j'ai vu qu'il fallait mettre les .tpl à la racine du nom du module : ça fonctionne ... mais je trouve ça bizarre vu que ça ne correspond pas à la doc :/

 

Faut-il copier tout le contenu du dossier ? on ne peut pas juste redéfinir ce que l'on veut ? La doc est-elle incorrecte ?

Link to comment
Share on other sites

Bonjour,

 

J'ai également fait plusieurs tests et impossible de surcharger un module en suivant les indications de la documentation, je n'y parviens qu'en mettant le template à la racine du module, comme l'a indiqué Shimrra : "/themes/montheme/modules/monmodule/montemplate.tpl"

 

Je pencherai donc pour une erreur dans la documentation (peut-être que ce fonctionnement sera mis en place dans une future version), d'autant plus que ce n'est pas la première fois que je rencontre ce genre de "coquille" dans la doc...

 

Quelqu'un en sait plus à ce sujet ?

Link to comment
Share on other sites

Bonjour,

 

Le mieux ne serait-il pas de demander directement aux auteurs de PM_ADVS voir ce qu'ils en pensent ?

Ils sont généralement assez réactifs même sur des questions assez complexes ;)

 

Je pencherai donc pour une erreur dans la documentation (peut-être que ce fonctionnement sera mis en place dans une future version), d'autant plus que ce n'est pas la première fois que je rencontre ce genre de "coquille" dans la doc...

 

Il suffirait juste de surcharger un autre module (voir un autre module tiers) et voir si le problème se reproduit ?

Link to comment
Share on other sites

Oui c'est bien ça, je n'ai pas essayé avec le module de Shimrra mais avec d'autres modules et à chaque fois cela ne fonctionne pas.

 

En fait je souhaitais créer un post pour indiquer l'erreur dans la doc où savoir si cela venait de moi quand je suis tombé sur le post de Shimrra...

Link to comment
Share on other sites

  • 3 weeks later...

Je confirme que le problème est toujours là en version 1.5.4.1.

 

La doc explique qu'il faut mettre tous les tpl du module dans un répertoire /views mais la surcharge du module dans le thème ne fonctionne plus. Il me semble que ça fonctionnait jusqu'à la version 1.5.1.

 

Du coup, je ne sais pas quelle méthode employer car je peux mettre tous les tpl des hooks à la racine des modules mais c'est plus pratique d'avoir le répertoire /views pour gérer les tpl des contrôleurs front-office et back-office.

Link to comment
Share on other sites

J'ai trouvé le problème et comment le contourner. (J'ai proposé les modifications sur Github.)

 

En attendant, la solution est de surcharger les classes "Module" et "ModuleFrontController".

 

Pour cela il faut créer un fichier si il n'existe pas dans /override/classes/module/Module.php et copier la fonction :

<?php
abstract class Module extends ModuleCore
{
public function getTemplatePath($template)
{
 $overloaded = $this->_isTemplateOverloaded($template);
 if ($overloaded === null)
  return null;
 /*startHack*/
 if(file_exists(_PS_THEME_DIR_.'modules/'.$this->name.'/views/templates/hook/'.$template))
  return _PS_THEME_DIR_.'modules/'.$this->name.'/views/templates/hook/'.$template;
 /*endHack*/
 if($overloaded)
  return _PS_THEME_DIR_.'modules/'.$this->name.'/'.$template;
 else if (file_exists(_PS_MODULE_DIR_.$this->name.'/views/templates/hook/'.$template))
  return _PS_MODULE_DIR_.$this->name.'/views/templates/hook/'.$template;
 else
  return _PS_MODULE_DIR_.$this->name.'/'.$template;
}
}

 

Puis, créer un fichier si il n'existe pas dans /override/classes/controller/ModuleFrontController.php et copier la fonction :

 

<?php
class ModuleFrontController extends ModuleFrontControllerCore
{
public function setTemplate($template)
{
 /*startHack*/
 if(Tools::file_exists_cache(_PS_THEME_DIR_.'modules/'.$this->module->name.'/views/templates/front/'.$template))
  $this->template = _PS_THEME_DIR_.'modules/'.$this->module->name.'/views/templates/front/'.$template;
/*endHack*/
 elseif (Tools::file_exists_cache(_PS_THEME_DIR_.'modules/'.$this->module->name.'/'.$template))
  $this->template = _PS_THEME_DIR_.'modules/'.$this->module->name.'/'.$template;
 elseif (Tools::file_exists_cache($this->getTemplatePath().$template))
  $this->template = $this->getTemplatePath().$template;
 else
  throw new PrestaShopException("Template '$template'' not found");
}
}

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

  • 1 month later...

Bonjour,

 

je me permet de répondre à ce topic pour éviter d'en créer un nouveau. Mon problème est similaire car en voulant installer un module (qui marchait bien il y a deux semaines -mais j'ai tout réinstallé depuis -) j'obtiens le message d'erreur suivant:

 

"Le ou les modules suivants n'ont pas été correctement installés :

  • - blockhomeproductslide :
    Impossible d'installer la surcharge : La méthode initContent dans la classe SearchController est déjà surchargé."

 

Je n'ai toujours pas pu résoudre le problème avec la méthode préconisée plus haut, ni avec ce que j'ai pu voir sur internet. Lorsque je modifie différents fichiers plus rien ne marche, j'obtiens une page blanche dans mon back-office.

 

Quant à la documentation, elle nous dit:

 

"Surcharger un contrôleur

 

Grâce à l'héritage objet, vous pouvez modifier le comportement d'un contrôleur, ou en ajouter de nouveaux.

Les contrôleurs de PrestaShop sont tous stockés dans le dossier /controllers, et utilise le suffixe "Core".

Par exemple, lorsque vous travaillez avec le contrôleur de catégorie :

  • Fichier : /controllers/CategoryController.php
  • Classe : CategoryControllerCore

Si vous souhaitez modifier un contrôleur, vous devez d'abord créer une nouvelle classe sans le suffixe "Core", et placer ce fichier dans le dossier /override/controllers.

Par exemple, lorsque vous surchargez le contrôleur de catégorie :

  • Fichier : /override/controllers/front/CategoryController.php
  • Classe : CategoryController"

 

Et bien je n'y comprends rien. Si quelqu'un peut me venir en aide, je l'attends tel un messie :D

Merci et bonne journée.

Link to comment
Share on other sites

Bonjour @coquoricot,

 

le problème que vous rencontrez avec l'installation du module "blockhomeproductslide" est différent du problème énoncé.

 

Ce topic concerne la surcharge des fichiers tpl d'un module dans un thème.

 

Dans votre cas, l'installation du module essaie de placer du code dans le fichier /override/controllers/front/SearchController.php

mais le fichier a déjà été modifié par un autre module ou par un prestataire et il faut donc intervenir manuellement pour installer ce module.

 

Il faut comparer les fichiers /modules/blockhomeproductslide/override/controllers/front/SearchController.php

avec le fichier /override/controllers/front/SearchController.php

et placer le code au bon endroit.

Link to comment
Share on other sites

Bonjour @coquoricot, le problème que vous rencontrez avec l'installation du module "blockhomeproductslide" est différent du problème énoncé. Ce topic concerne la surcharge des fichiers tpl d'un module dans un thème. Dans votre cas, l'installation du module essaie de placer du code dans le fichier /override/controllers/front/SearchController.php mais le fichier a déjà été modifié par un autre module ou par un prestataire et il faut donc intervenir manuellement pour installer ce module. Il faut comparer les fichiers /modules/blockhomeproductslide/override/controllers/front/SearchController.php avec le fichier /override/controllers/front/SearchController.php et placer le code au bon endroit.

 

Bonjour,

 

j'étais donc à côté de la plaque et je m'en excuse.

 

Si à tout hasard vous aviez l'occasion de m'aiguiller pour la modification du fichier, n'hésitez pas à répondre à mon précédent MP pour ne pas polluer plus encore ce topic. J'ai en effet tenté une modification à l'instant, mais sans succès. J'ai sans doute placé le morceau de code de telle façon qu'il était inactif.

 

Edit: après avoir bien regardé, les deux document ont un contenu parfaitement identique...

 

Merci à vous,

Bonne soirée.

 

Edit 2: mon problème a été résolu en supprimant simplement le fichier searchcontroller du dossier override.

Edited by coquoricot (see edit history)
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...