Crear un Observer en Magento

 

Magento

En Magento tenemos lo que se llaman eventos, se ejecuta antes o después de una acción determinada en la tienda Magento, por ejemplo después de terminar nuestra compra.

Estas llamadas se realizan con un método que se llama en las funciones que despachan tal evento:

Mage::dispatchEvent($evento, array $data);

No haría falta llamar este método, ya que Magento posee un listado predefinido.

Lo más fácil para entender esto y ver su utilidad, es con un ejemplo:

EJEMPLO

La idea, es que cuando se ejecute el observer “sales_order_payment_place_end”, después de hacer un pago correcto, se ejecute nuestro código, que en este caso tan solo guardara en el Log de Magento, la id de la orden, y el total. Tendremos que que añadir nuestro pequeño módulo en app/code/ “comumunity” o “local”, community si tu interés es compartirlo con otros usuario, si es algo particular, en “local”.

Es muy importante como crear tu directorio de carpetas para magento, al final del este post adjunto el ejemplo completo, para tener más claro el árbol de directorios.

Otro de los aspectos importantes a tener en cuenta, es el archivo config.xml, donde definiremos el nombre del observer de Magento, también definiremos, la clase y el método que ejecutaremos, cuando se lance el observer.


    
        
            1.0
        
    
    
        
            
                
                    
                        singleton
                        Pay_Order_Model_Observer
                        orderView
                    
                
            
        
    

 

Ya solo nos queda crear nuestro observer, con nuestro método, de una forma muy sencilla.

getEvent();
    $order = $event->getOrder();
    
    Mage::log('orden id: ' . $order->getRealOrderId() . ' total:' . $order->getGrandTotal(););
    return $this;


  }

}

?>

 
Nos faltaría solo un pequeño paso para Magento reconozca el módulo, y es añadir un archivo en el directorio ect/modules de magento, en este caso el archivo será llamado “Invoice_Order.xml” ( tiene que ver con el nombre que hemos dado al directorio donde guardamos el módulo.



    
        
            true
            community
        
    

Ver el código en Github

Cambiar url navegador desde Ajax en cakePhp (location.hash)

 

cakePhp

Cuando usamos Ajax,  y cargamos información, no se refresca nuestra url.
A veces nos interesa que si sea así, que nuestra url cambié.

Una manera sencilla de hacerlo en cakePhp

echo $ajax->link(
‘ver Usuario’,
array(‘controller’ => ‘User’, ‘action’ => ‘ver/’.$id),

array(‘update’ => ‘ver_usuario’, ‘complete’ => ‘window.location.hash = “usuario”‘)
);

Lo que tenemos en window.location.hash es lo que luego saldrá en nuestra url tipo:  http://localhost/user/ver#usuario

Enviar felicitaciones de navidad desde gmail

 

Emprendedor

Como programador, esto debería ser una tarea muy sencilla. diseñas un felicitación curiosa, y las envias por mail.

El problema viene cuando piensas. Habrá que meter la imagen en html, y crear un lista de correos, o enviarlo através de un programa de newsletters, nada de eso dejo los pasos a seguir para hacerlo de una manera sencilla desde gmail, gracias a mi amigo Antonio de Dandelium.

  1. Nos vamos Configuraciones generales de gmail, y en firmas añadimos la imágen desde un url ( antes tendrá que estar subida a tu web).
  2. Vamos a contactos de gmail.
  3. Generamos un nuevo grupo. Llámandolo “Navidad11″, por ejemplo.
  4. Seleccionamos todos los contactos a los que queremos enviar el correo.
  5. Cuando los tengamos seleccionado, arriba hay un botón llamado Grupos, selecionamos el nombre del grupo “Navidad11″.
  6. Vamos a crear correo, se añadirá directamente la firma con la imagen. Habilita el campo CCO (Con copia oculta) que está debajo de CC.
  7. Escribimos “Navidad11″.
  8. Y enviamos.

Por cierto Feliz Navidad y Feliz 2011

Formulario Ajax en Cakephp

 

cakePhp

Algo que a veces queremos hacer, es al tener un formulario, ver los datos enviados desde el formulario si refrescar la página.
Un ejemplo de como hacerlo añadiendo un album, con un campo nombre.

Hay dos cosas a tener en cuenta, el envio del formulario es ajax, pero tambien el div donde cargaremos los resultados es ajax.

$content .= $this->Ajax->div('calendars');
foreach ($calendars as $calendar){
$content .=$interestDestination["InterestDestination"]["name"];
}
$content .=  $this->Ajax->divEnd('calendars');

$content .= $this->Ajax->form('/calendars', 'post', array('update' => 'calendars'));
$content .= $this->Form->input('name', array('label' => 'Agregar Nuevo Grupo:', 'error' => __('Nombre no valido', true)));
$content .= $this->Form->submit('Añadir',array('escape'=>false));
$content .= $this->Form->end();

return $content

Podemos ver que el update del form tiene el mismo nombre que le div Ajax, está observación es importante ya que el formulaior hace la llamada a este div, y esté div es el que se refrescará sin tener que refrescar toda la página.

En el controlador deberemos tener en cuenta, el añadir var $helpers = array(‘Ajax’);

Y también en la función en este caso “calendars” que ejecutamos desde nuestro formulario, deberemos hacer un render a la página donde se encuentra el mismo formulario.
Por ejemplo si nuestro formulario está en nuestro index $this->render(‘index’, ‘ajax’);