Saludos @sergio94 y @inmahub64,
@inmahub64 tiene un buen punto. La situación que describes, donde addCSS y addJS no están disponibles en $this->context->controller, suele indicar un problema con la referencia al controlador actual o con la herencia de la clase. En PrestaShop 1.7.4.1, los métodos addCSS y addJS están definidos en ControllerCore, de la cual AdminController y ModuleAdminController heredan.
Si tu clase ConorderdisAdmin está configurada como un ModuleAdminController (es decir, extiende ModuleAdminController), entonces estos métodos deberían estar disponibles directamente en la propia instancia del controlador ($this), no a través de $this->context->controller. Es un error común intentar acceder a ellos de forma indirecta cuando ya están disponibles de forma directa.
La solución más directa para el fragmento de código que has mostrado, asumiendo que ConorderdisAdmin es de hecho tu controlador de módulo y hereda de ModuleAdminController, es la siguiente:
function run()
{
// Si ConorderdisAdmin es un ModuleAdminController,
// los métodos addCSS y addJS están disponibles directamente en $this.
if (method_exists($this, 'addCSS')) {
$this->addCSS($this->module->getPathUri() . 'views/css/admin_conorderdis.css');
$this->addJS($this->module->getPathUri() . 'views/js/adminConditionBuilder.js');
}
$activeTab = Tools::getValue('conorderdis_tab', 'dashboard');
// ... el resto de tu lógica ...
Explicación del cambio:
- He simplificado la condición
if a if (method_exists($this, 'addCSS')). Si ConorderdisAdmin extiende ModuleAdminController, $this siempre será válido y tendrá estos métodos. El isset($this->context->controller) y method_exists($this->context->controller, 'addCSS') son redundantes y pueden causar problemas si $this->context->controller no apunta exactamente a la instancia correcta del controlador en ese momento.
- He cambiado las llamadas de
$this->context->controller->addCSS a $this->addCSS y de $this->context->controller->addJS a $this->addJS. Esto asegura que los assets se cargan usando los métodos de la propia instancia del controlador de tu módulo, que es lo correcto cuando estás dentro de un ModuleAdminController.