2011-06-29 11 views
6

Mi objetivo es desactivar el módulo mediante programación (por ejemplo, durante algún evento de observador). El primer observador que encontré es controller_front_init_before.Magento, ¿cómo deshabilitar el módulo mediante programación?

Así que mi módulo está escuchando a ella, y luego hacer lo siguiente:

Mage::getConfig()->getModuleConfig('IG_LightBox')->active=(string)'false'; 

Pero el módulo seleccionado todavía está activo en cada página.

También probé este enfoque (lo mismo pero de forma diferente):

Mage::getConfig()->getNode('modules/IG_LightBox')->active=(string)'false'; 

También probé impresora para reiniciar config después de todo y de loadModules una vez más, pero ambos no ayudará.

Mage::getConfig()->loadModules(); // won't help 
Mage::getConfig()->reinit(); // won't help 

¿Es posible desactivar el módulo mediante programación?

Actualización 1. Esta solución funciona perfectamente para el back-end. active = false realmente deshabilita el módulo, pero también lo necesito para el front-end. Así que mantengo mi búsqueda.

Update 2 Hay 2 métodos en el app/Mage.php, llamados init y initSpecified, lo que permite ejecutar el Magento con el número seleccionado de sólo módulos. Pero esos métodos no se llaman en el flujo predeterminado.

Actualización 3 hay un evento observador podemos utilizar para activar o desactivar los módulos de pago sobre la marcha. Se llama payment_method_is_active. Este ejemplo de código hace que el método de pago con cheque Giro siendo no está activo:

public function payment_method_is_active(Varien_Event_Observer $observer) 
{ 
    if($observer->getMethodInstance()->getCode()=='checkmo') 
    { 
     $observer->getResult()->isAvailable=false; 
    } 
} 
+0

no veo un lugar donde realice "guardar" en este ya que este valor está almacenado en el archivo del módulo no en la base de datos tiene que cambiar el valor en el archivo de configuración y luego guardar esto o de lo contrario se restablecerá todo el tiempo –

Respuesta

3
+0

Utiliza el mismo enfoque, activo = falso, el desactivador más poderoso no funciona. La desactivación de salida funciona, pero este enfoque no se pudo usar con todos los módulos. De todos modos, gracias! –

+0

¿Podría compartir los contenidos útiles del enlace aquí? Los enlaces tienen una tendencia a desaparecer. –

4

Creo que depende del tipo de módulo que desee deshabilitar. Mi artículo funcionó para el tipo de módulo que quería desactivar, pero ese módulo comprobó si estaba activado, mientras que la mayoría de los módulos no lo hacen.

Magento carga toda la configuración del módulo a la vez. Es imposible crear un módulo que escuche este proceso porque el módulo no se habría cargado mientras se lleva a cabo el proceso. Esto crea una paradoja. Es imposible evitar que un módulo se cargue utilizando otro módulo.

Como resultado, las únicas opciones que quedan con son:

  1. Editar el núcleo.
  2. Use módulos que estén mejor diseñados y se permitan de forma explícita ser deshabilitados a través de una opción o método de configuración.
  3. Edite/extienda el módulo que desea deshabilitar para que pueda deshabilitar su funcionalidad durante el tiempo de ejecución.

Espero que esto ayude .. hágamelo saber si puedo ayudarlo a encontrar la manera de deshabilitar el módulo que está tratando.

+0

Gracias Gabriel, respuesta muy útil. Mi objetivo era desarrollar el módulo, que permitirá deshabilitar cualquier módulo y mostrarlos solo para las direcciones IP del desarrollador. No quiero anular el núcleo esta vez :) –

+1

Entiendo. No se puede intentar deshabilitar completamente cualquier otro módulo que use otro módulo porque todos los módulos se cargan al mismo tiempo antes de que se activen los eventos. –

Cuestiones relacionadas