Come disattivare completamente un modulo personalizzato
-
16-10-2019 - |
Domanda
Dopo una settimana di pieno il duro lavoro e la codifica ho sviluppato con successo un'estensione di Magento che sta funzionando come previsto, ma quando ho disattivare il modulo da Magento amministrazione config ancora ignorando la funzionalità, ho letto sull'impostazione falso nel modulo di configurazione globale file, ma non sempre come posso fare questo programatically.
Uno hanno alcuna idea di come questo possa essere risolvere?
Grazie
Soluzione
Dalla sezione di amministrazione con tutti i moduli non è possibile disabilitare un modulo. Da lì si può disabilitare l'uscita di qualche modulo solo. Ciò significa che il codice è ancora eseguito, ma nessun output viene generato.
In effetti, il modo per disattivare un modulo è quello di cambiare il <active>
tag false
nel xml dichiarazione del modulo (app/etc/modules/Namespace_Module.xml
) e cancellare la cache.
Non credo che è possibile disabilitare un modulo dal codice in quanto i moduli vengono caricati molto presto l'applicazione (Mage_Core_Model_Config::_loadDeclaredModules()
).
Quando si costruisce moduli personalizzati mi piace anche essere in grado di disattivare loro con 'un clic'. Ecco come faccio di solito è:
-. Aggiuntivo in uno system.xml 'abilitato' campo
<enabled translate="label" module="news">
<label>Module is enabled</label>
<frontend_type>select</frontend_type>
<source_model>adminhtml/system_config_source_yesno</source_model>
<sort_order>1</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</enabled>
- creare un metodo nel helper per controllare questo flag
public function getIsEnabled(){
return Mage::getStoreConfigFlag('section/group/enabled'); //replace section & group with appropriate values.
}
Ora, in ogni pezzo di codice che è prevalente qualcosa nel nucleo o si suppone di uscita qualcosa, io uso questo metodo di supporto.
Diciamo che stai facendo override un metodo chiamato getSomething()
in una classe. Questo è come il tuo metodo dovrebbe essere simile:
function getSomething($params){
if (!Mage::helper('module_name')->getIsEnabled()){ //if my module is not enabled
return parent::getSomething($params);
}
//your logic here.
}
Ogni .phtml
nel vostro modulo dovrebbe essere simile a questo:
<?php if (Mage::helper('module_name')->getIsEnabled()) : //if my module is enabled?>
<div>Block output here</div>
<?php endif; ?>
Se tutto il modello e metodi sovrascritti assomigliano a questo, si dovrebbe essere in grado di disabilitare (simulare disabilita) dal pannello di configurazione.
Altri suggerimenti
Marius ha perfettamente ragione, tranne una cosa.
Anche la disattivazione del modulo impostando active
su false nel file di bootstrap non è sufficiente nel caso in cui qualche altro modulo sta estendendo sua categoria o usando il suo modello.
Quindi, per essere sicuri al 100% l'estensione viene disattivato si hanno anche per rimuoverlo è tutti i file o le directory almeno rinominare / file.