Observers Magento: Pegatina Magneto de regalo
19

sep

 

Observers Magento: Pegatina Magneto de regalo

Observer en Magento: Implementación regalo pegatina de Magneto en cada pedido.

En esta nueva entrada vamos a ver mediante un caso práctico como podríamos modificar la funcionalidad de Magento para realizar una implementación de un ficticio pero posible modelo de negocio. Como sabemos, Magento es una plataforma opensource de comercio electrónico con la que podemos llevar a la práctica desde los modelos de negocios tradicionales como los mas complejos. Si bien, por defecto Magento se adapta perfectamente al modelo de comercio electrónico tradicional puede no cubrir todas nuestras expectativas en un primer momento cuando deseamos personalizarla en función de nuestras necesidades. ¿Esto quiere decir que como Magento no cumple mis expectativas tras su instalación y pruebas no me sirve como base para llevar a al practica mi modelo de negocio? Ni mucho menos, Magento es completamente adaptable y personalizable bien mediante sus extensiones o mediante programación propia. En esta entrada nos centraremos en analizar como mediante un mínimo de configuración de la plataforma y la programación de unos observer podemos lograr que Magento se adapte a nuestras necesidades.

Antes de nada: ¿Que es un observer?

Magento dispone de una serie de eventos que se van ejecutando conforme se van realizando las tareas propias de un comercio electrónico. Podemos definir un evento como un “avisador” de que se está realizando una acción concreta en la plataforma. ¿Y por que es útil este sistema de eventos? Pues muy simple, si Magento es capaz de avisarnos cuando está sucediendo un acción concreta mediante los observadores podemos capturar esta acción y realizar las personalizaciones que queramos. ¿Capturar una acción? Si, eso es, si Magento nos lanza un aviso cada vez que por ejemplo se añada un producto al carrito de la compra, un observer concreto sería el encargado de detectar el aviso de Magento “añado un producto al carrito de la compra”. En ese momento, cuando Magento lanza el aviso el observer que esta siempre a la espera escuchando que Magento lance el aviso recoge el testigo y procede a ejecutar lo que nosotros tengamos planeado. ¿Útil verdad? Fijaos de que forma tan sencilla podemos personalizar el funcionamiento de la tienda. Si detecto el evento de Magento que me interesa capturar, de cara a la personalización mis necesidades, puedo hacer que Magento ejecute lo que desee adaptando su funcionamiento. Esta metodología de trabajo es muy útil ya que para nada afecta al core de Magento (El core de Magento es aquella parte del código que no se puede debe de modificar en Magento).

¿Y que tiene que ver un observer con una pegatina de Magneto de regalo por cada pedido?

Pues tras ver como funciona el sistema de eventos observer en Magento podemos personalizar el código para lograr nuestro objetivo. Definamos antes  las necesidades de un posible tienda online y veamos como lograr nuestro objetivo empleando los observers en Magento.

Necesidades del comercio electrónico:

1- Todos los productos de la tienda online tendrán una cantidad máxima permitida en el carrito de una unidad. Esto bien podría ser por tratarse de productos “únicos” y exclusivos donde la cantidad de stock de cada producto es de una unidad o bien por que así se ha configurado la cantidad máxima permitida en el carrito a uno. Si bien, en cualquiera de los casos, el punto uno lo podemos resolver empleando únicamente la configuración del panel de administración de nuestra tienda online.

2- Por cada pedido que se realice se regalará una pegatina de Magneto como obsequio: Este punto ya no puede resolverse empleando la configuración del panel de administración. Es cierto que hay módulos que permitirían resolver este punto, pero nosotros vamos a centrarnos en ver como añadir la pegatina de Magneto de regalo mediante el uso de observer en Magento.

¿Que eventos observar para añadir como regalo la pegatina de Magneto?

Para añadir la pegatina de magneto como regalo a nuestro pedido, lo primero que vamos a analizar es que evento debe escuchar nuestro observer. Magento contiene una gran cantidad de eventos. Para hacernos una idea aquí tenemos un listado de todos los eventos de Magento en su versión 1.8 . De todos ellos, debemos antes de nada analizar cuales nos van a interesar, para ello debemos de responder las siguientes cuestiones:

1- ¿Cuando nos va a interesar añadir la pegatina de Magento como regalo ?

Informaremos a nuestro cliente que su pedido tendrá como regalo una pegatina de Magneto en el mismo carrito de la compra. Para ello, la primera vez que un usuario agregue un producto al carrito, añadiremos nuestra pegatina de Magneto que previamente habremos configurado a precio cero en el panel de administración y que por configuración de la plataforma podemos hacer que no sea visible en toda la tienda online. Si el cliente sigue añadiendo otros productos a nuestro carrito ya no añadiremos mas regalos (el regalo es una pegatina de Magneto por pedido, no por producto)

2- ¿Necesitaremos borrar el la pegatina de Magento de regalo en algún caso ?

Si, imaginemos que un cliente añade uno o varios productos. Tras añadir el primero de los productos, la pegatina de Magento se añadirá automáticamente al carrito. Aunque el cliente nos indica que no quiere contar con la posibilidad de actualizar el carrito de la compra y nos pide eliminar toda posibilidad de acceder a la edición del stock  desde el carrito, eliminando para ello el campo de edición de cantidades y el botón de actualización masiva de las mismas, si existe la posibilidad de eliminar productos por linea. En el caso de tener varios productos en el carrito junto con el regalo, existiría la posibilidad de que el cliente eliminará todos sus productos dejando únicamente la pegatina de Magneto y terminará el proceso de compra. Este caso debe de ser contemplado, por lo tanto, cuando en el carrito únicamente exista un producto y la pegatina de Magento, en caso de que el producto sea eliminado del carrito, la pegatina de Magneto también deberá de desaparecer para no permitir compras únicamente con la pegatina de Magneto de regalo en nuestra tienda online a coste cero.

Tras analizar estos casos, los eventos que decidimos observar son:

Para añadir la pegatina de Magneto: checkout_cart_product_add_after

Para eliminar la pegatina de Magneto: sales_quote_remove_item

 

¡Manos a la obra!

Hasta aquí ya hemos realizado un análisis funcional de las necesidades del cliente, sabemos como queremos implementar nuestra solución y que eventos debemos de escuchar para llevarla a cabo. He realizado un video donde podéis ver como funciona la tienda online tras añadirle las personalizaciones que hemos tratado:

Procedamos ahora con la realización del módulo (en este artículo no cubre la estructura básica de un módulo de Magento) :

Paso 1:  Nos dirigimos a app/etc/modules/ y creamos el fichero Especialistaenmagento_CartEvents.xml con el siguiente contenido:

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

Paso 2:  Creamos la siguiente estructura de directorios y ficheros dentro de la carpeta local:

Estrucutra módulo observer Magento

 

El contenido de cada uno de los ficheros es el siguiente:

Contenido del fichero Data.php:

<?php
class Next_CartEvents_Helper_Data extends Mage_Core_Helper_Abstract
{

}

Contenido del fichero config.xml: En el definimos los eventos que hemos comentado anteriormente y los observers que ejecutarán nuestras personalizaciones para añadir y borrar la pegatina de Magneto.

<?xml version="1.0"?>
<config>
  <modules>
    <Especialistaenmagento_CartEvents>
      <version>0.1.0</version>
    </Especialistaenmagento_CartEvents>
  </modules>
  <global>
    <events>
      <checkout_cart_product_add_after> <!-- evento observado para añadir el regalo -->
        <observers> <!--observer para añadir el regalo-->
          <especialistaenmagentocartevents_add_product_to_cart>
            <type>singleton</type>
            <class>Especialistaenmagento_CartEvents_Model_Observer</class>
            <method>addToCartEvent</method>
          </especialistaenmagentocartevents_add_product_to_cart>
        </observers>
      </checkout_cart_product_add_after>
      <sales_quote_remove_item> <!--evento observado para eliminar el regalo -->
        <observers> <!--observer para eliminar el regalo -->
          <especialistaenmagentocartevents_update_cart>
            <class>Especialistaenmagento_CartEvents_Model_Observer</class>
            <method>removeItemToCartEvent</method>
          </especialistaenmagentocartevents_update_cart>
        </observers>
      </sales_quote_remove_item>
    </events>
    <helpers>
      <cartevents>
        <class>Especialistaenmagento_CartEvents_Helper</class>
      </cartevents>
    </helpers>
  </global>
</config>

Contenido del fichero Observer.php: este fichero contiene la lógica del observer, contiene los métodos removeItemToCartEvent, encargado de eliminar la pegatina de Magneto en el caso que hemos indicado y el método addToCartEvent, encargado de añadir la pegatina de Magneto al carrito de la compra de nuestra tienda online. Como de costumbre, he comentado el código para facilitar su comprensión.

<?php
class Especialistaenmagento_CartEvents_Model_Observer{

 public function addToCartEvent(Varien_Event_Observer $observer){
   $item = $observer->getEvent()->getQuoteItem();
   //Asegurate de que el sku del producto que quieras regalar es 'regalo'
   $regalo= $seguro = Mage::getModel('catalog/product')->loadByAttribute('sku','regalo')->getId();
   $cart = Mage::getSingleton('checkout/cart');
   $quote = Mage::getSingleton('checkout/cart')->getQuote();
   $items = $quote ->getItems();
   //Todo pedido no lleva regalo a menos que demuestre lo contrario
   $conregalo= false;
   $conregalo = $quote -> hasProductId($regalo);
   Mage::log("Te digo si tengo regalo");
   Mage::log($conregalo);
   //
   //Si no tengo regalo lo añado al carrito
   //
   if (!$conregalo) {
     $cart -> addProduct($regalo,1);
   }
 }
 public function removeItemToCartEvent(Varien_Event_Observer $observer){
   $regalo= Mage::getModel('catalog/product')->loadByAttribute('sku','regalo')->getId();
   $cart = Mage::getSingleton('checkout/cart');
   $quote = Mage::getSingleton('checkout/cart')->getQuote();
   $items = $quote ->getItems();
   Mage::log('$quote->getItemsCount()');
   Mage::log($quote->getItemsCount());
   //será dos cuando habiendo dos le de a borrar. es decir el regalo mas otro.
   $cartItems = Mage::getSingleton('checkout/session')->getQuote()->getAllVisibleItems();
   //será dos cuando habiendo dos le de a borrar. es decir el regalo mas otro.
   if($quote->getItemsCount()==2){
     //Identifico la pegatina de Magneto por su SKU y lo elimino
     foreach ($cartItems as $_item){
       if($_item->getSku() == 'regalo'){
         $_item->isDeleted(true);
         break;
       }
     }
   }
 }
}

Si estás interesado en obtener mas información acerca de como personalizar tu tienda online no dejes de visitar la de desarrollo de la zona de servicios:


Magento

Espero que esta entrada para la personalización de vuestra tienda online Magento y el uso de los observers en Magento os sirva de ayuda para potenciar y personalizar vuestro ecommerce.

Resumen
Nombre
Observers en Magento: Regalo pegatina de Magneto en cada pedido
Autor
Descripción
Pegatina Magneto de regalo: Uso de Observers tienda online Magento. Desarrollo comercio electrónico Magento. Personalización para añadir pegatina Magneto.
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.


Deja un comentario
 

Tu email no será publicado. Campos obligatorios . *