Magento module in- of uitschakelen per winkel

Door 28 augustus 2014Tips & Trucs

Standaard kan er in de backend van Magento via “system-> configuration -> advanced” een module in- of uitgeschakeld worden per winkel. Wanneer je op deze manier een module uitschakelt worden echter enkel de frontend zaken uitgeschakeld. Mocht je ergens op in haken met bijvoorbeeld een observer blijft dit gewoon actief!

Magento module helemaal uitschakelen

Om een Magento module helemaal uit te schakelen (dus voor elke winkel binnen Magento) is de beste optie om deze in zijn module xml uit te schakelen. Te vinden in: “app/etc/modules/”, verander hier “active” naar “false”:

<active>false</active>

Magento module per winkel uitschakelen

Hier zijn meerdere mogelijkheden, wat je vaak ziet is dat modules een eigen configuratie in de backend hebben waarbij een module in- of uitgeschakeld kan worden, dit is dan ook per winkel in te stellen. Om dit voor elkaar te krijgen dien je de configuratie opties in je config of system.xml te definiëren en deze waardes uit te lezen in je code. Wanneer deze functionaliteit niet aanwezig is of je bezig bent met een eigen module is er een makkelijkere optie! Stel je gebruikt een observer om ergens op in te haken, bijvoorbeeld dit event:

<checkout_cart_add_product_complete>
	<observers>
		<bd_skipcart_observer>
			<type>singleton</type>
			<class>RD_Skipcart_Model_Observer</class>
			<method>afterAddToCart</method>
		</bd_skipcart_observer>
	</observers>
</checkout_cart_add_product_complete>

Dan staat de functionaliteit in je observer model, bijvoorbeeld:

<?php
class RD_Skipcart_Model_Observer extends Varien_Object
{
	public function afterAddToCart(Varien_Event_Observer $observer) {

		$response = $observer->getResponse();

		$response->setRedirect(Mage::getUrl('checkout/onepage'));
		Mage::getSingleton('checkout/session')->setNoCartRedirect(true);

	}
}

Zet hier een if statement omheen waarbij je de waarde uit de configuratie uitlees zoals aan het begin van dit bericht omschreven:

<?php
class RD_Skipcart_Model_Observer extends Varien_Object
{
	public function afterAddToCart(Varien_Event_Observer $observer) {

		if(!Mage::getStoreConfigFlag('advanced/modules_disable_output/RD_SkipCart')) {

			$response = $observer->getResponse();

			$response->setRedirect(Mage::getUrl('checkout/onepage'));
			Mage::getSingleton('checkout/session')->setNoCartRedirect(true);

		}
	}
}

Op deze manier kan je module functioneel in- en uitgeschakeld worden per winkel middels de al aanwezige functionaliteit in Magento.

Dit is naar mijn idee een veel nettere oplossing dan dat je elders op het internet tegen komt, bijvoorbeeld het idee van Inchoo welke je tegen komt als je zoekt naar deze functionaliteit.