Módulos Magento: Importe mínimo de pedido
01

dic

 

Módulos Magento: Importe mínimo de pedido

Módulos Magento: Importe mínimo de compra mediante módulos Magento

Magento es una plataforma de comercio electrónico construida mediante Zend framework que emplea una arquitectura EAV (Entidad Atributo Valor). Estas características, hacen que nuestro ecommerce sea totalmente ampliable mediante la instalación de diversos módulos Magento que podemos adquirir desde Magento connect o simplemente mediante el desarrollo de nuestros propios módulos Magento.

En esta nueva entrada del blog de Magento profundizaremos en el desarrollo de los módulos Magento. Para ello, explicaremos desde cero un posible caso práctico que solucionaremos mediante la programación de un módulo de Magento

 

Módulos Magento: Estudio del caso practico.

Para esta entrada sobre la creación de módulos Magento vamos a suponer un caso práctico en el que en nuestra ecommerce no se deben de permitir pedidos de un importe inferior que definiremos desde el panel de administración de nuestra tienda online Magento. Este importe mínimo también debe de ser modificable desde el panel de administración de la plataforma, pues dependiendo de ciertos parámetros de ventas nos puede interesar subirlo o bajarlo a nuestro antojo cuando lo consideremos oportuno.
Por otro lado, si el cliente intenta realizar un pedido con un importe inferior al especificado deberá de ser redirigido a una pagina estática que habremos creado desde el CMS de nuestra tienda online. En esta página explicaremos el porqué de nuestras condiciones de pedido mínimo. Cuando el usuario aterrice en la página también mostraremos una alerta tipo cuyo mensaje podrá ser introducido y modificado desde el panel de configuración de nuestro módulo.

En el siguiente video se puede observar el funcionamiento del módulo:

Módulos Magento: Creación de un Módulo en Magento

Seguidamente procedemos a describir la estructura de ficheros para la creación de módulos  Magento

Módulos Magento: Registrando nuestros módulos Magento

Para registrar nuestro módulo Magento crearemos el fichero Eem_compraminima dentro del direcctorio “app/etc/modules/Eem_compraminima.xml”

Módulos Magento registrando nuestro módulo magento

El contenido de este xml es el siguiente:

<?xml version="1.0"?>
<config>
  <modules>
    <Eem_Compraminima>
      <active>true</active>
      <codePool>local</codePool>
      <version>0.1.0</version>
    </Eem_Compraminima>
  </modules>
</config>

En este fichero Eem_compraminima estamos definiendo lo que Magento gestiona como “namespace” que reservamos para el nombre de nuestra compañía (Especialista en Magento) y el nombre de nuestra extensión, en nuestro caso compraminima. Así pues en Eem_compraminima la asigancinación sería la siguiente:

Namespace: Eem

Nombre del módulo Magento: Compraminima

En el resto del xml lo asignamos al codepool local y lo activamos. Tan solo con este fichero introducido, si nos dirigimos al panel de administración de nuestro magento, dentro de “Sistem > Configuration > Advanced > Advanced” podremos observar como nuestro módulo está activado:

Módulos Magento enable modulo magento

 

Módulos Magento: Creación del system.xml

Al activar el módulo de Magento hemos definido que nuestro codepool será local por lo tanto crearemos nuestro fichero system.xml en “app >code >codepool >namespace >nombre_del_modulo >etc >system.xml” En nuestro caso dentro de “app> code >local >Eem >Compraminima> etc>system.xml”

Módulos Magento system módulo magento

El contenido de este fichero es el siguiente:

<config>
  <tabs>
    <eem translate="label" module="compraminima">
      <label>Especialista en Magento</label>
      <sort_order>000</sort_order>
    </eem>
  </tabs>
  <sections>
    <eem translate="label" module="compraminima">
      <label>Compra minima</label>
      <tab>eem</tab>
      <frontend_type>text</frontend_type>
      <sort_order>1000</sort_order>
      <show_in_default>1</show_in_default>
      <show_in_website>1</show_in_website>
      <show_in_store>1</show_in_store>
        <groups>
          <general translate="label" module="compraminima">
            <label>Configuración</label>
            <frontend_type>text</frontend_type>
            <sort_order>01</sort_order>
            <show_in_default>1</show_in_default>
            <show_in_website>1</show_in_website>
            <show_in_store>1</show_in_store>
              <fields>
                <yes_no_activo translate="label">
                  <label>Activado</label>
                  <frontend_type>select</frontend_type>
                  <source_model>adminhtml/system_config_source_yesno</source_model>
                  <sort_order>00</sort_order>
                  <show_in_default>1</show_in_default>
                  <show_in_website>1</show_in_website>
                  <show_in_store>1</show_in_store>
                </yes_no_activo>
                <importe_minimo_pedido translate="label">
                  <label>Importe mínimo de compra</label>
                  <frontend_type>text</frontend_type>
                  <sort_order>01</sort_order>
                  <show_in_default>1</show_in_default>
                  <show_in_website>1</show_in_website>
                  <show_in_store>1</show_in_store>
                </importe_minimo_pedido>
                <mensaje_pedido_minimo translate="label">
                  <label>Aviso a mostar si se desea comprar menos del importe mínimo</label>
                  <frontend_type>textarea</frontend_type>
                  <sort_order>02</sort_order>
                  <show_in_default>1</show_in_default>
                  <show_in_website>1</show_in_website>
                  <show_in_store>1</show_in_store>
                </mensaje_pedido_minimo>
              </fields>
          </general>
        </groups>
    </eem>
  </sections>
</config>

En este fichero podemos observar como definir en los módulos Magento el acceso dentro del panel de administración. Si nos dirigimos a Sistema configuración podemos observar como se traduce dicha estructura. La siguiente imagen explica como se traslada la estructura del fichero system.xml en el panel de administración de Magento:

Módulos Magento desarrollo modulo Magento

Las opciones “show_in_default” y “show_in_website” definen la visibilidad de las mismas dentro del scope seleccionado. En este ejemplo hemos empleado los fields de tipo opción, texto y área de texto, pero Magento dispone de multitud de opciones disponibles para la creación de módulos Magento.

Módulos Magento: Creación del config.xml

En este fichero definimos la estructura de la lógica de los módulos Magento. El contenido de nuestro config.xml es el siguiente:

<?xml version="1.0"?>
<config>
  <modules>
    <Eem_Compraminima>
      <version>0.1.0</version>
    </Eem_Compraminima>
  </modules>
  <global>
    <!-- Módulos Magento: Defino el modelo -->
    <models>
      <compraminima>
        <class>Eem_Compraminima_Model</class>
      </compraminima>
    </models>
    <!-- Módulos Magento: Defino el helper -->
    <helpers>
      <compraminima>
        <class>Eem_Compraminima_Helper</class>
      </compraminima>
    </helpers>
  </global>
  <!-- Módulos Magento: Defino valores por defecto del helper -->
  <default>
    <eem>
      <general>
        <yes_no_activo>0</yes_no_activo>
        <importe_minimo_pedido>15001500</importe_minimo_pedido>
        <mensaje_pedido_minimo><![CDATA[El pedido mínimo de compra es de %s euros]]></mensaje_pedido_minimo>
      </general>
    </eem>
  </default>
  <!-- Módulos Magento: Defino la restricición solopara el frontend, lo podria poner en global, esto ya como se considere -->
  <frontend>
    <events>
      <!-- Módulos Magento: Evento a ser observado -->
      <sales_quote_save_after>
        <observers>
          <!-- Módulos Magento: Defino mi observer -->
          <eem_compraminima_verificarpedidominimo>
            <type>singleton</type>
            <class>Eem_Compraminima_Model_Observer</class>
            <method>verificarPedidoMinimo</method>
          </eem_compraminima_verificarpedidominimo>
        </observers>
      </sales_quote_save_after>
    </events>
  </frontend>
  <!-- Módulos Magento: Defino permisos para evitar el error 400 -->
  <adminhtml>
    <acl>
        <resources>
            <all>
                <title>Allow Everything</title>
            </all>
            <admin>
                <children>
                    <system>
                        <children>
                            <config>
                                <children>
                                    <eem>
                                        <title>Compraminima - All</title>
                                    </eem>
                                </children>
                            </config>
                        </children>
                    </system>
                </children>
            </admin>
        </resources>
    </acl>
</adminhtml>
</config>

Como se puede observar aquí definimos la versión de los módulos Magento, etiqueta “modules”, las clases del modelo y del Helper, etiqueta “global”, y los valores por defecto que contendrá la configuración de nuestro módulo que vimos dentro del system.xml, etiqueta “default”. Además, dentro de la etiqueta “frontend” (pues no queremos que nuestras condiciones sean aplicables desde el back de Magento) definimos nuestro observer (mas información sobre el uso de eventos/observers en módulos Magento aquí). La última sección, etiqueta “acl”, define el sistema de permisos de los módulos Magento, para evitar el típico error de permisos cuando accedemos a la configuración del módulo visualizada en la imagen anterior.

Módulos Magento: Helpers

Para hacer uso del helper definido en el config.xml crearemos el fichero Data.php ubicado dentro de “app/code/local/Eem/Compraminima/Helper/Data.php”:

Módulos Magento helper desarrollo modulo magento

El contenido del fichero Data.php es el siguiente

<?php
class Eem_Compraminima_Helper_Data extends Mage_Core_Helper_Abstract{

	const XML_PATH_ACTIVO = 'eem/general/yes_no_activo';
	const XML_PATH_IMPORTE_MINIMO = 'eem/general/importe_minimo_pedido';
	const XML_PATH_IMPORTE_MINIMO_MSG ='eem/general/mensaje_pedido_minimo';

        //Módulos Magento: Verificación de si el módulo Magento está activo
	public function ModuloActivo($moduleName = null){
		if ((int)Mage::getStoreConfig(self::XML_PATH_ACTIVO, Mage::app()->getStore()) != 1) {
		return false;
		}
		//return true;
		// return parent::ModuloActivo($moduleName);
	}
        //Módulos Magento: Obtengo el importe mínimo introducido
	public function ImportePedidoMinimo($store = null){
	return (int)Mage::getStoreConfig(self::XML_PATH_IMPORTE_MINIMO, $store);
	}

        //Módulos Magento: Obtengo el mensaje mínimo
	public function MensajePedidoMinimo($store = null){
	return Mage::getStoreConfig(self::XML_PATH_IMPORTE_MINIMO_MSG,$store);
	}

}

En el helper definimos una serie de funciones que nos permiten leer los valores introducidos en los campos del panel de administración de la plataforma. Posteriormente emplearemos estas funciones dentro de nuestro observer para implementar la lógica de nuestro módulo Magento:

  • MóduloActivo: Nos permite conocer si hemos activado el módulo
  • ImportePedidoMinimo: Obtenemos el importe introducido como pedido mínimo
  • MensajePedidoMinimo: Cargamos el mensaje a mostrar

Módulos Magento: Creación del Observr.php

EL contenido del fichero Observer.php, ubicado dentro e la carpeta Model es el siguiente:

<?php
class Eem_Compraminima_Model_Observer{

	public function verificarPedidoMinimo($observer){

		Mage::log('Dentro del Helper', null, 'pedidominimo.log');
		//Módulos Magento: Cargo el Helper
		$helper = Mage::helper('compraminima');
		//Módulos Magento: cargo Quote
		$quote = $observer->getEvent()->getQuote();
		Mage::log((float)$helper->ImportePedidoMinimo(), null, 'pedidominimo.log');
		//Módulos Magento: Comparo si el total es menor que el mínimo que establezco gracias al helper
		if ((float)$quote->getGrandTotal() < (float)$helper->ImportePedidoMinimo()) {
			//Módulos Magento: La condición ya se está cumpliendo
			Mage::log('entro', null, 'pedidominimo.log');
			$precioconformato = Mage::helper('core')->currency($helper->ImportePedidoMinimo(), true, false);
			// Tengo un pedido con importe menor que el permitido
			//Módulos Magento: Añado el mensaje de error
			Mage::getSingleton('checkout/session')->addError($helper->__($helper->MensajePedidoMinimo(),
$precioconformato));
			//Módulos Magento: Añado al URL key de mi página de destino
			$url = Mage::getUrl('pedido-minimo');
			//Módulos Magento: Redirijo a la página de destino para informar al cliente de mis condiciones
			$response = Mage::app()->getFrontController()->getResponse();
			$response->setRedirect($url);
			$response->sendResponse();
			exit;
		}
	}
}

La función verificarPedidoMinimo de nuestro módulo Magento se encarga de comparar el total del pedido con el importe introducido desde el panel de administración gracias a al función definida en el helper ImportePedidoMinimo si la condición se cumple añadimos el mensaje de error y redireccionamos a la página con la URL key “pedido-mínimo” que ya estará creada dentro del panel de administración de la plataforma dentro de la sección CMS > Páginas estáticas.

Módulos Magento: Conclusiones Módulo Magento para importe de pedido mínimo.

En esta nueva entrada del blog especialista en Magento hemos analizado la estructura básica de los módulos Magento. Hemos creado un módulo desde cero hasta lograr una estructura como la siguiente:

Módulos magento estructura desarrollo de un módulo magento

Hemos visto como podemos desarrollar módulos Magento, creando opciones personalizadas para los mismos en el panel de administración de la plataforma, que posteriormente empleamos en nuestro observer gracias al uso de los helpers.

Si estás interesado en obtener mas información acerca de como personalizar tu tienda online mediante módulos Magento puedes visitar la sección de desarrollo Magento dentro de la zona de servicios ecommerce:


Magento

Espero que esta entrada sobre Módulos Magento os sirva de ayuda para potenciar y personalizar vuestro ecommerce.

Resumen
Nombre
Módulos Magento: Importe mínimo pedido
Autor
Descripción
Modulos Magento: Los modulos de Magento permiten expandir la funcionalidad de nuestro ecommerce. Tutorial para la creación de Modulos Magento. Tutorial Modulos Magento para la creación de un pedido con importe mínimo
The following two tabs change content below.
Especialista en Magento y servicios ecommerce: Consultoría ecommerce, Optimización Magento, Desarrollo Magento, Integración Magento ERP y Posicionamiento SEO Magento.


5 Comments

  • Eduardo

    03. dic, 2014

    Muy buen tutorial, ayuda mucho para seguir las buenas practicas y aprender más.
    Una duda en el método ModuloActivo esta por defecto la variable $moduleName = null, lo que veo es que no lo estas usando, estas comentando parte del código.

    • Jose Vicente Ribera

      03. dic, 2014

      Si fue para pruebas, tienes toda la razón, en esa parte se verifica si el módulo esta activo o inactivo y se puede emplear luego en el observer a modo de control.
      Un saludo

  • Carlos

    04. dic, 2014

    Fantástico artículo. Siempre es de gran ayuda explicar el desarrollo de módulos. Tienes un nuevo suscriptor :-)

  • Carlos

    28. may, 2015

    Hola!, he seguido el tutorial, muchas gracias por el aporte!. Tengo una consulta, cuando intento ingresar a la configuracion de compra minima me sale el error:
    404 Error
    Page not found.
    Cual podr’ia ser la causa?

  • Carlos

    28. may, 2015

    Ya lo resolví muchas gracias, el problema era que tenía que desloguearme y volver a loguearme, no sé por qué pero así se solucionó!.
    Gracias por los tutoriales!

Deja un comentario
 

Tu email no será publicado. Campos obligatorios . *