Bonjour @inesparis, @julienpanier et @marion_velo,
Vous avez mis le doigt sur le problème. En effet, dans PrestaShop 1.7.x, et surtout sur les versions plus anciennes comme la 1.7.6.6, le $this->context->controller n'est pas toujours garanti d'être une instance complète d'un AdminController dans tous les contextes d'exécution du module, notamment lors de l'initialisation de certaines pages de configuration. La condition method_exists peut alors échouer.
La solution la plus robuste est de s'assurer que le contrôleur est bien une instance de AdminController avant d'essayer d'appeler ses méthodes d'ajout d'assets. Cela permet d'éviter les appels sur des objets qui n'auraient pas ces fonctions. Voici comment vous pouvez modifier votre extrait de code dans conorderfee/classes/ConorderfeeAdmin.php :
function run()
{
// Assurez-vous que le contrôleur est bien un AdminController
if ($this->context->controller instanceof AdminController) {
$this->context->controller->addCSS($this->module->getPathUri() . 'views/css/admin_conorderfee.css');
$this->context->controller->addJS($this->module->getPathUri() . 'views/js/adminConditionBuilder.js');
}
$activeTab = Tools::getValue('conorderfee_tab', 'dashboard');
if ($activeTab === 'policies' && isset($this->context->controller)) {
En remplaçant isset($this->context->controller) && method_exists($this->context->controller, 'addCSS') par $this->context->controller instanceof AdminController, vous vous assurez que seul un contrôleur d'administration pleinement fonctionnel tentera d'ajouter les CSS/JS. Pour les fonctionnalités complexes comme les frais conditionnels, un module dédié comme le module conditional order fees module est souvent plus fiable et plus facile à maintenir que des hacks de code, surtout face aux mises à jour de PrestaShop.