2010-11-29 16 views
16

Tengo un pequeño fragmento de código en un archivo de plantilla que SÓLO deseo ejecutar si se instala cierto módulo. Encontré el código a continuación, que puede usar para encontrar si un módulo está activo, pero quiero saber si está instalado un módulo.Magento - ¿Verifica si hay un módulo instalado?

$modules = Mage::getConfig()->getNode('modules')->children(); 
$modulesArray = (array)$modules; 

if($modulesArray['Mage_Paypal']->is('active')) { 
    echo "Paypal module is active."; 
} else { 
    echo "Paypal module is not active."; 
} 

estoy pensando que tal vez podría obtener una lista de nombres de todos los módulos que están instalados, y luego usar

if (stristr($modulelist, 'Name_Extension')) 

mostrar mi código sólo si se ha instalado la extensión se hace referencia.

¿Alguien alguna idea de cómo hacer eso? O alguna mejor solución?

Respuesta

10

Prueba esto:

$modules = Mage::getConfig()->getNode('modules')->children(); 
$modulesArray = (array)$modules; 

if(isset($modulesArray['Mage_Paypal'])) { 
    echo "Paypal module exists."; 
} else { 
    echo "Paypal module doesn't exist."; 
} 
+0

Parece que esto va a hacer el truco. Primero probaré un poco más, por lo que aún no aceptaré la respuesta, pero definitivamente me veo bien. –

+5

@baoutch es el correcto – WonderLand

+0

Por lo tanto, hay varios estados para los módulos mencionados en esta pregunta ("instalado" vs "activo" vs "habilitado").De hecho, me gusta más la respuesta de @ baoutch para habilitarla, pero no creo que eso sea lo que OP estaba pidiendo. De todos modos, fue hace más de cuatro años, así que ya está :) –

1

en la declaración de su módulo, intente agregar un elemento depends, como en this page. Esto probablemente genere una excepción, que podría manejar con un bloque try/catch.

+0

poco más complejo que el anterior, pero puede ver que también funciona también. Gracias por publicar, ya que estoy seguro de que esto también será útil en el futuro ... –

6

Otra forma de encontrar si se ha instalado un módulo pero desactivado es con:

if (Mage::getStoreConfigFlag('advanced/modules_disable_output/Mage_Paypal')) { 
    echo "Paypal module is installed"; 
} 

Editar
han realizado sólo una versión de este - el uso de la poco conocido ifconfig - podría mostrar un bloque solo si otro módulo está deshabilitado. p.ej.

<layout> 
    <default> 
     <reference name="content"> 
      <block ifconfig="advanced/modules_disable_output/Mage_Paypal" type="core/template" template="sorry/this/is/unavailable.phtml" /> 
     </reference> 
    </default> 
</layout> 
+0

¡Salud! No sirve en este caso en particular, pero de nuevo puede ser útil en el futuro ... –

2

Puede comprobar si existe un módulo de instalación utilizando este fragmento Mage::getConfig()->getNode('modules/Mage_Paypal') devuelve falso si no existe

80

Hay un ayudante principal para que:

Mage::helper('core')->isModuleEnabled('MyCompany_MyModule'); 

Está en Mage_Core_Helper_Abstract.

También hay un método isModuleOutputEnabled() para verificar si la salida del módulo está deshabilitada en Sistema -> Configuración -> Avanzado -> Deshabilitar salida de módulos.

+7

Esta es la mejor respuesta. No solo verifica si está instalado, sino si está habilitado. – Ian

+1

Con el comentario anterior, también estoy de acuerdo. Sin embargo, permítanme enfatizar que a través de la función de ayuda básica, Magento Core Team ha hecho un contrato con los desarrolladores de modo que cualquier cambio de implementación que hagan bajo el capó, este método siempre funcionará sin importar qué. Esto no es así con las soluciones que se basan en el análisis de la jerarquía XML de configuración. ? –

0

En cualquier clase, modelo, controlador o incluso PHTML puede llamar y funcionará.

Data.php

class Company_Module_Helper_Data extends Mage_Core_Helper_Abstract 
{ 
    const XML_PATH_GEN_ENABLE = 'Section/Group/Field'; 
    public function isEnable() 
    { 
    return Mage::getStoreConfigFlag(XML_PATH_GEN_ENABLE,Mage::app()->getStore()->getId()); 
    } 
} 

se le puede llamar mediante el siguiente código Mage::helper('module_name')->isEnable()

su archivo de configuración es como

config.xml

<global> 
    <helpers> 
    <module_name> 
     <class>Company_Module_Helper</class> 
    </module_name> 
    </helpers> 
    // Another Necessary Code for this extension 
</global> 
+0

Data.php getStore() -> getId()); \t}} > puede llamar mediante el siguiente código Mago :: helper ('module_name') -> isEnable() y su config.xml como bla ... ..blah COMPANYNAME_MODULENAME_Helper ..blah bla ...

+0

favor [editar su respuesta] (http://stackoverflow.com/posts/31977905/edit), agregue el código y formatee su código correctamente. Es difícil leer el código en los comentarios. – ekad

Cuestiones relacionadas