Las 7 extensiones gratuitas imprescindibles en Magento

En nuestros años de experiencia existen una serie de extensiones gratuitas para Magento que usamos en todos nuestros o proyectos o en casi todos. Se caracterizan por su robustez, calidad y flexibilidad.

Enhanced Admin Grids

https://www.magentocommerce.com/magento-connect/enhanced-admin-grids-editor.html

Nos permite personalizar las columnas de todas las tablas (grid) del panel de administración, incluyendo el resto de atributos de la entidad mostrada. Incluye también columnas especiales que cruzan información con otras entidades en las tablas de gestión de productos o en la gestión de ventas.

Google Analytics+ by Fooman

https://www.magentocommerce.com/magento-connect/google-analytics-by-fooman.html

Esta extensión envía información de comercio electrónico mejorado a Google Analytics frente a la funcionalidad nativa de integración que lleva Magento. Podremos configurar el funnel de conversión, trackear a un perfil secundario, incluir el código de conversión de adwords, enviar la información de ventas incluyendo las categorías de los productos o incluir códigos de remarketing dinámico.

SMTP Pro Email

https://www.magentocommerce.com/magento-connect/ASchroder/extension/1865/aschroder.com-smtp-pro

Podremos configurar un smtp externo, para que nuestro Magento envíe a través de él todas las comunicaciones de email. Tan sencillo como eso. Tiene soporte para distintos cifrados e integración rápida con los principales servicios. Su uso, nos permite evitar problemas de seguridad y mantenimiento de un servicio de correo en la máquina local.

Attribute Splash Pages

https://www.magentocommerce.com/magento-connect/attribute-splash-pages.html

Attribute Splash Pages nos da la opción de crear navegaciones de producto según los valores de atributos del producto. Podremos crear páginas de producto que pertenezcan a un valor de un atributo determinado (por ejemplo todos los productos cuyo color sea rojo).  Crea también las páginas del atributo (por ejemplo “color”) que listarán todas las opciones del atributo para las que haya página creada. Permite configurar todo el contenido de esa página de forma similar a una categoría y el comportamiento de las urls.

Maintenance Page – ArtsOn.IT

https://www.magentocommerce.com/magento-connect/maintenance-page-artson-it-1.html

Pongamos el sitio en mantenimiento temporalmente para resolver un problema o migrar la web.

Owebia Shipping Free

https://www.magentocommerce.com/magento-connect/owebia-shipping-free.html

Esta extensión permite crear métodos de envío en Magento cuyo cálculo puede tener toda la lógica que se nos ocurra. Permite recorrer los productos del carrito y acceder a sus atributos, así como a los propios datos del carro para establecer condiciones a la aplicación de la regla y cálculos para el importe fijado. Sin duda la herramienta para cálculos de transportes en que entran muchas variables en juego (productos refrigerados y no refrigerados, destinos, pesos, etc).

AOE Scheduler

https://www.magentocommerce.com/magento-connect/aoe-scheduler.html

Con ella podremos controlar todas las tareas cron internas en Magento, su periodicidad, la línea de tiempo en que se ejecutan, si hay errores o disparar manualmente una tarea cron si lo necesitamos.

Guardar información de producto de forma rápida en Magento

La forma tradicional de guardar información de producto en Magento consiste en cargar en modelo del producto, setear los nuevos datos y guardarlo. El problema de este procedimiento es que es muy lento ya que guarda entera la entidad del producto realizando todas las validaciones y disparando todos los eventos asociados.

$producto = Mage::getModel('catalog/product')->load(idpdto);
$producto->setAttributeName($value);
$producto->save;

Para modificar de forma más rápida un producto, podemos escribir directamente en las tablas de la base de datos “catalog_product_entity_*”. Pero este mecanismo es muy arriesgado en cuanto a la consistencia de los datos.

Magento nos facilita otras formas de hacerlo más aconsejables dentro de su estructura de trabajo.

Sí queremos modificar un atributo concreto de un único producto podemos utilizar la funcion saveAttribute del ResourceModel de producto de la siguiente forma:

$producto = Mage::getModel('catalog/product')->load(idpdto);
$producto->setAttributeName($value);
$producto->getResource()->saveAttribute($producto, 'attribute_name');

Si queremos modificar un atributo concreto con el mismo valor para varios productos podemos utilizar el modelo de datos de la actualización masiva de productos de la siguiente forma:

Mage::getSingleton('catalog/product_action')->updateAttributes(array($idpdto1,$idpdto2,...), array('attribute_name' => $value), $store_id);

Archivos Install y Upgrade de Entidades y Datos de Entidad en Magento

Ficheros install/upgrade

Cada vez que Magento carga un módulo que incluye entidades que tengan un “Setup“, Magento comparará la versión actual del módulo (en su archivo de configuración config.xml) y la versión registrada del módulo por el sistema (tabla core_resource de la base de datos).

Si no existe versión instalada o no coinciden las versiones, Magento ejecutará el “Setup” de la entidad yendo la carpeta “…/sql/custommodule_setup” de nuestro módulo para comprobar los scripts de instalación y actualización que existen.

Estos archivos pueden ser php o sql.

Si en nuestro caso la carpeta contuviera los siguientes archivos:

  • mysql4-install-0.1.0.php
  • mysql4-install-0.1.2.php
  • mysql4-install-1.0.0.php
  • mysql4-upgrade-0.1.0-0.1.2.php
  • mysql4-upgrade-0.1.2-1.0.0.php

Planteemos varias situaciones y analicemos el resultado:

  • Carga 0.1.0 – Instalada ninguna: instala mysql4-install-0.1.0.php
  • Carga 0.1.0 – Instalada 0.1.0: no hace nada
  • Carga 0.1.2 – Instalada ninguna: instala mysql4-install-0.2.0.php
  • Carga 0.1.2 – Instalada 0.1.0: actualiza mysql4-upgrade-0.1.0-0.1.2.php
  • Carga 1.0.0 – Instalada 0.1.0: actualiza mysql4-upgrade-0.1.0-0.1.2.php y mysql4-upgrade-0.1.2-1.0.0.php

Cuando se completa la instalación o actualización se actualiza la versión del módulo registrada en la base de datos.

Los módulos instalados y  su versión actual se almacenan en  la tabla “core_resource” de la base de datos.

Ficheros install/upgrade de datos

De igual forma que operan los install/upgrade de entidad, se buscarán y ejecutarán los archivos de install/upgrade de datos que serán buscados por Magento en la carpeta “…/data/custommodule_setup” de nuestro módulo.

Estos archivos son php.

Cuando se completa la instalación o actualización de datos se actualiza la versión de los datos del módulo registrada en la base de datos.

Los módulos instalados y  su versión actual de datos se almacenan en  la tabla “core_resource” de la base de datos.

Pasos al crear una entidad en Magento

La creación de una entidad (FLAT o EAV) tiene unos elementos comunes:

  1. Definición de la entidad en config.xml
  2. Creación del model
  3. Creción del resource model
  4. Creación del collection model
  5. Script de instalación/actualización de la base de datos que cree los elementos necesarios para la entidad en la base de datos
  6. (opcional) Script que cree/actualice datos para la entidad

Las diferencias entre ambos tipos de entidades se da en:

  • config.xml : con una forma distint de definir la entidad
  • En las clases de las que extienden los modelos:
  FLAT EAV
Model Mage_Core_Model_Abstract Mage_Core_Model_Abstract
Resource Model Mage_Core_Model_Mysql4_Abstract Mage_Eav_Model_Entity_Abstract
Resource Setup Mage_Core_Model_Resource_Setup Mage_Eav_Model_Entity_Setup
Collection Model Mage_Core_Model_Mysql4_Collection_Abstract Mage_Eav_Model_Entity_Collection_Abstract
  • Los elementos/métodos a instalar en el script de instalación/actualización.

Entidad EAV

Fuente: http://www.magentocommerce.com/knowledge-base/entry/magento-for-dev-part-7-advanced-orm-entity-attribute-value

Es un modelo de almacenamiento muy flexible. Permite almacenar los campos que definen una entidad también en la base de datos.

Entidad EAV Magento

Tablas que intervienen:

eav_entity_type: Tabla que contiene los tipos de entidades EAV registrados en el sistema. Para cada entidad almacena el id y el código de la entidad, junto con los modelos de entidad y atributos de la entidad que lo definen.

entity_type_id entity_type_code entity_model attribute_model
1 customer customer/customer customer/attribute
2 customer_address customer/address customer/attribute
4 catalog_product catalog/product catalog/resource_eav_attribute

 

eav_attribute: Tabla en la que se definen los atributos de cada entidad.

attribute_id entity_type_id attribute_code
1 5 firstname
2 7 lastname
3 12 Password_hash
4 15 Taxtvat

 

Modelos de Datos en Magento

Magento sigue un esquema ORM (Mapeador Objeto-relacional). ORM define un sistema de conversión de datos entre una programación orientada a objetos y una base de datos relacional.

Existen 2 tipos de entidades gestionadas por modelos:

  • FLAT: implementa un mapeo sencillo de un objeto a una tabla, esto significa que cada atributo del objeto coincide con un campo de la estructura de la tabla.
  • EAV: describe una entidad con un número dinámico de atributos

Cada tipo de entidad está formado por 3 capas de modelos:

  • Model Class
  • Resource Model Class
  • Model Collection Class

Un “model” es usado para trabajar una entidad individual, une la lógica del negocio con la lógica de datos.

Un “resource model” es usado para interactuar con la base de datos (o la capa de persistencia de datos) en nombre del modelo. Actualmente sigue el esquema CRUD (Crear, Obtener, Actualizar, Borrar).

Un “collection” proporciona los mecanismos para obtener y trabajar varias entidades al mismo tiempo usando el “resource model”.

 

Crear un crontab en Magento

La definición de un crontab se realiza en el archivo etc/config.xml de nuestro módulo:

<config>
  ...
  <crontab>
    <jobs>
      <namespace_module>
        <schedule>
          <cron_expr>0,15,30,45 * * * *</cron_expr>
        </schedule>
        <run>
          <model>module/model::method</model>
        </run>
      </namespace_module>
    </jobs>
  </crontab>
  ...
</config>

Este ejemplo correrá el método cada 15 minutos el método “method” del modelo de datos “module/model”.

Zaragento Patrocinador de la XI Feria de Tiendas Virtuales de Aragón

Estamos encantados de anunciaros que Zaragento es Patrocinador de la XI Feria de Tiendas Virtuales de Aragón; el encuentro referencia del ecommerce en Aragón.

Allí estarán la mayoría de tiendas virtuales y proveedores de nuestra región.

logoferia

Participaremos además junto a David Eguizábal (Do Your Net) en una sesión sobre criterios para analizar el CMS ecommerce a utilizar; y de la cuál esperamos que disfrutéis.

Escribir y leer la sesión en Magento

Hay que diferenciar 2 tipos de sesiones distintas:

  • Frontend: Mage::getSingleton(‘core/session’)
  • backend: Mage::getSingleton(‘admin/session’)

Magento cuenta con 3 métodos fundamentales asociados a ambos tipos de sesiones (utilizaremos de ejemplo el frontend):

  • Mage::getModel(‘core/session’)->setData($name, $value) o Mage::getModel(‘core/session’)->setName($value) – esta función es usada para guardar un valor en la sesión del cliente.
  • Mage::getModel(‘core/session’)->getData($name, $value) o Mage::getModel(‘core/session’)->getName($value) – esta función es usada para recuperar un valor en la sesión del cliente.
  • Mage::getModel(‘core/session’)->unsetData($name) o Mage::getModel(‘core/session’)->unsName() – esta función es usada para eliminar un valor en la sesión del cliente.

Más información sobre las sesiones:

  • http://docs.magentocommerce.com/Mage_Core/Mage_Core_Model_Session.html
  • http://docs.magentocommerce.com/Mage_Admin/Mage_Admin_Model_Session.html

Escribir y leer cookies en Magento

 

Magento cuenta con 3 métodos fundamentales asociados a la gestión de cookies:

  • Mage::getModel(‘core/cookie’)->set($name, $value, $period, $path, $domain, $secure, $httponly) – esta función es usada para guardar un valor en la cookie del cliente. $period, $path, $domain, $secure, $httponly pueden no definirse, en ese caso Magento usará los valores por defecto definidos en la configuración a través del panel de administración.
  • Mage::getModel(‘core/cookie’)->delete($name, $path, $domain, $secure, $httponly) – está función elimina la cookie del cliente.
  • Mage::getModel(‘core/cookie’)->get($name) – está función retorna el valor de la cookie $name del cliente. Si no se define $name, devuelve un array con todas las cookies.

Para obtener información de una cookie (además de su valor):

  • $cookieExpires = Mage::getModel(‘core/cookie’)->getLifetime($cookieName);
  • $cookiePath = Mage::getModel(‘core/cookie’)->getPath($cookieName);
  • $cookieDomain = Mage::getModel(‘core/cookie’)->getDomain($cookieName);
  • $cookieSecure = Mage::getModel(‘core/cookie’)->isSecure($cookieName);
  • $cookieHttponly = Mage::getModel(‘core/cookie’)->getHttponly($cookieName);

Fuentes y más información: