Magento: primeras incursiones, recorriendo los productos

Logo de Magento

Este estupendo CMS orientado a la venta online de productos hace las delicias de los vendedores, de igual modo de los maquetadores, y cómo no, también de los programadores.

Como analista programador llevaba ya un tiempo queriendo meterle mano a las entrañas de Magento. Así que poco a poco, he ido cogiendo los manuales para el usuario, luego el del diseñador, y ahora tengo entre manos el del programador. Ahora según van surgiendo las necesidades voy haciendo incursiones cada vez más a fondo en el código fuente de esta humongous web application.

La verdad es que lo estoy disfrutando porque Magento está desarrollado con una buena estructura y sobre un gran framework de desarrollo PHP, el Zend Framework. Incorporando técnicas de programación que le dan una gran flexibilidad sin añadir demasiada complejidad.

Un poco de teoría

Magento es una aplicación web desarrollada sobre PHP. Es un programa Open Source, con una gran comunidad donde hay muchos colaboradores que publican sus desarrollos y/o consejos. Es una aplicación ingentemente grande, propiedad ahora mismo de eBay, originada por la empresa Varien en 2007.

Magento está desarrollado sobre el Zend Framework versión 1. Incluso Magento 2 sigue estando desarrollado sobre el Zend Framework 1. Cuando se inició Magento en el 2007, Zend era el framework más de maduro y fue la apuesta que hicieron. Al arrancar el proyecto de Magento 2 todavía el Zend Framework 2 estaba inmaduro, así que Magento 2 se inició sobre la misma versión del Zend Framework. Finalmente, tras la publicación de Magento 2 a finales de 2015, tenemos un Magento 2 en el que se pretende independizar el framework que tenga por debajo de la programación que se haga por encima. Es decir, se pretende crear un framework propio de Magento que independice al desarrollador de Magento de lo que haya realmente dentro en el núcleo de Magento.

En el mundo PHP, tenemos el gran gestor de librerías PHP que está haciendo furor en éste mundo en los últimos años. Todas las dispersas librerías PHP, cada una de su padre y de su madre, en antaño complejas de organizar, ahora están bien organizadas y mantenibles mediante Composer. Ya escribí sobre lo que es Composer he hice algunas pruebas aquí sobre otro framework de desarrollo llamado Silex. Y cómo no, también tenemos el ya clásico composer.json también ya en Magento 2. Se incluyen algunas librerías de Symfony, esto me da mucho que pensar y me hace atisbar en el horizonte que el futuro de Magento es muy interesante para el programador.

Recorriendo los productos con PHP

Todo Magento está desarrollado sobre el paradigma de la Programación Orientada a Objetos, POO para los amigos. Esto hace muy simple hacer acciones muy potentes. Espero seguir publicando frecuentemente, compartiendo mi granito de arena en todo esto de la programación. Así que vamos con un simple ejemplo.

Hacer un script que recorra todos los productos de nuestro catálogo puede ser tan simple como esto:

<?php
// incluimos el autocargador
require_once __DIR__.'/app/Mage.php';

// a veces es necesario instanciar un objeto de tipo aplicación de Magento
Mage::app();

$nline = "\n";

// declaramos un modelo de producto
$productModel = Mage::getModel('catalog/product');
// obtenemos la colección de productos del catálogo
$productsCollection = $productModel->getCollection();

// los recorremos..
foreach ($productsCollection as $productItem) {
    // cargando los datos de cada uno..
    $product = $productModel->load($productItem->getId());
    // para mostrar su SKU (identificador interno)
    echo $product->getSku() . $nline;
}

Como puedes observar, está muy bien encapsulado. No hay consulta a la base de datos, aunque las podemos obtener de los objetos instanciados. El trabajo en bruto sobre los datos se pueden hacer con los clásicos getters y setters, y si finalmente hemos hecho cambios sobre un producto podemos guardarlos haciendo un simple:

$product->save();

Así todo el sistema se encargará de hacer la consulta a la base de datos, haciendo el guardado de los datos.

Recorriendo, contando y editando

Imaginemos ahora que tenemos que recorrer todos los productos, buscando los que tienen precio entre 20 y 30, poniéndolos a 18 porque queremos ofertarlos. El bucle anterior foreach que recorre la colección de productos quedaría tal que así:

...
$contador = 0;
foreach ($productsCollection as $productItem) {
    // cargando los datos de cada uno..
    $product = $productModel->load($productItem->getId());

    // obtengo el precio..
    $price = $product->getPrice();

    // si tengo que ofertarlo..
    if($price >= 20 and $price <= 30) {
        $product->setPrice(18); // modifico su precio..
        $product->save(); // y lo guardo en la base de datos.
        echo 'Modificado el precio del producto '.$product->getSku().$nline;
        ++$contador;
    }
}
echo 'Hemos modificado '.$contador.' productos.'.$nline;
...

Terminando

Ahora no tenemos más que dejar el script corriendo por un tiempo desde línea de comandos para ver cómo el trabajo se va haciendo y reflejando en la base de datos.

Teniendo claro el paradigma POO, lo que es el autoloader, la estructura de carga de clases, overriding.. y a la madre del cordero que parió Magento, veremos que está todo muy pero que muy bien estructurado. Sí, ya lo sé, se dice rápido todo esto pero no es tan complicado adentrarse en los códigos fuentes PHP de Magento. Es bien divertido si eres una apasionado de la programación o de la informática. Con esto ya les dejo y me voy al sobre, a ver si pronto vuelvo con otro granito de arena..

Compartir..

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *