[PHP] Haciendo modulo “Hola Mundo” en Magento

Standard

Hace tiempo no hacia un post elaborado y como tenia que recordar algunas buenas practicas hoy les traigo esta entrada tipo “How-to” para que tu primer modulo en Magento salga con fritas. Vale aclarar, que veremos el código mínimo para hacer andar un modulo.

En primer instancia debemos tener un Magento andando en nuestro servidor local (http://magento.local/ por ejemplo), esto es bastante fácil y no requiere de una guiá extensa. Descargamos del sitio oficial la ultima versión de Magento, descomprimimos, creamos una base de datos y sin mas vueltas tenemos a nuestro Magento funcionando. Si tienen problemas con la instalación, solo dejen un comentario debajo…

1. Crear archivo Zarpele_Holamundo.xml

Nuestro Modulo se llamará Holamundo y el espacio de trabajo será Zarpele, buscamos la carpeta /app/etc/modules/ y creamos el archivo Zarpele_Holamundo.xml con este contenido:

Archivo: /app/etc/modules/Zarpele_Holamundo.xml

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

En nuestro backend (/admin), podemos observar el modulo activo si vamos a System -> Configuration -> Advanced -> Advanced junto a a otros módulos que proporcionan el funcionamiento correcto del sitio (es aconsejable no desactivarlos)

2. Configurando nuestro modulo

Ahora nos queda configurar nuestro modulo, en /app/code/local vamos a crear una carpeta con nuestro espacio de trabajo “Zarpele”, y crearemos otra carpeta dentro de esta con el nombre del modulo “Holamundo”.

En esta carpeta /app/code/local/Zarpele/Holamundo van a estar todos los archivos de nuestro modulo (configuraciones, controladores, vistas, modelos, bloques, etc).

Vamos a crear el archivo de configuración de nuestro modulo.

Archivo: /app/code/local/Zarpele/Holamundo/etc/config.xml

<?xml version="1.0"?>
<config>
    <!--Indicamos la version del modulo-->
    <modules>
        <Zarpele_Holamundo>
            <version>0.1.0</version>
        </Zarpele_Holamundo>
    </modules>    
    <!--Indica que estamos desarrollando para el frontend-->
    <frontend>
        <routers>
            <Zarpele_Holamundo_NombreDeRoute><!--NombreDeRoute es simplemente el nombre del route-->
                <use>standard</use><!--admin o standard-->
                <args>
                    <module>Zarpele_Holamundo</module><!--Nombre del modulo-->
                    <frontName>zarpele-holamundo</frontName><!--URL donde se podra acceder-->
                </args>
            </Zarpele_Holamundo_NombreDeRoute>
        </routers>
    </frontend>    
</config>

Expliqué brevemente este archivo en el mismo con comentarios, a medida que vayamos aumentando la complejidad de nuestro modulo les iré mostrando diferentes configuraciones.

3. Creando el controlador

Ahora solo nos falta crear el controlador para que funcione con esta configuración…

Archivo: /app/code/local/Zarpele/Holamundo/controllers/IndexController.php

<?php
class Zarpele_Holamundo_IndexController extends Mage_Core_Controller_Front_Action
{
    /*http://magento.local/index.php/zarpele-holamundo*/
    public function indexAction()
    {
        echo 'Hola Mundo Zarpele...';
    }
     
    /*http://magento.local/index.php/zarpele-holamundo/index/otraPagina*/
    public function otraPaginaAction()
    {
        echo 'Hola Mundo 2 Zarpele...';
    }
}
?><

Listo, ya hicimos nuestro primer modulo en Magento. Si este no funciona, no se olviden de limpiar cache (importante siempre a la hora de encontrar un problema) System -> Configuration -> Cache Management

Saludos y buen código…

Magento: Obtener todos los productos de un Store

Standard

Con el siguiente fragmento de codigo, obtendremos todos los productos que se encuentran bajo un Store.

En el ejemplo toma el Store por defecto, si quieren uno en particular debe pasárselo como parametro a setCurrentStore, luego de obtener todos los ids y guardarlo en un arreglo, levanta producto por producto y nos muestra su correspondiente SKU.

<?php
require_once '../app/Mage.php';
umask(0);
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

$product_ids = Mage::getModel('catalog/product')->getCollection()->getAllIds();

foreach ($product_ids as $id)
{
    $product = Mage::getModel('catalog/product')->load($id);

    echo 'SKU: '.$product->getSku();
}
?>

Salut!

Magento: Borrar subcategorias de una categoria.

Standard

Pequeno script en Php para borrar todas las subcategorias en una categoria en Magento.
Noten que se le pasa el ID de la categoria (2) y obtengo los hijos y los recorro y los borro uno por uno…

require_once '/app/Mage.php';
umask(0);
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

$category = Mage::getModel('catalog/category')->load(2);
if($category->hasChildren())
{
        $children_id = $category->getChildren();
        $children = explode(',',$children_id);
        for ($i=0;$i<count($children);$i++)
        {
            $subcategory = Mage::getModel('catalog/category')->load($children[$i]);
            $subcategory->delete();
        }
}

Saludos…

Magento: Preguntar si un modulo esta activo o no existe con PHP

Standard

Me encontré con el problema de que necesitaba saber si un modulo de Magento estaba activo o existia, y googleando por ahí encontré la forma…

Lo pongo en el blog, ya que me costo buscarlo, y como saben no existe mucha doc en español…

           $module='Company_Namemodule';
            $moduleActive=true;
            $modulesConfig = Mage::getConfig()->getNode('modules');
             
            if (!$modulesConfig->$module || !$modulesConfig->$module->is('active'))
            {
                $moduleActive=false;
            }
            else
            {
                $moduleActive=true;
            }

Listo…

Magento: Agregar producto al carro automaticamente.

Standard
magento

Para agregar productos al carro nos valemos de varios métodos que nos ofrece magento para facilitar el manejo de producto abstrayéndonos de cosas complicadas como la implementación.

Cuando el usuario llena un formulario donde ingresa from, to, message (en este ejemplo) este producto se ingresa al carro siendo estos tres datos Customs Options del producto.

Lo primero que hacemos es obtener el producto a traves de su SKU, luego llenamos todos los datos en un arreglo, los customs options se generan de manera incremental a partir del 1.

<?php
$product = Mage::getModel('catalog/product')->getIdBySku("zarpele-shirt");
$product = Mage::getModel('catalog/product')->load($product);

$idLabelCustomOptionFrom = 6;
$idLabelCustomOptionTo = 5;
$idLabelCustomOptionMessage = 4;
$idLabelCustomOptionProduct1 = 3;
$idLabelCustomOptionProduct2 = 2;
$idLabelCustomOptionProduct3 = 1;

$params = array();
$params['uenc'] = 'aHR0cDovL3NoZWVhYi5ndWlkby9pbmRleC5waHAvZ2lmdC13cmF_0';
//Producto
$params['product'] = 2035;
//Customs Options
$params['options'][$idLabelCustomOptionFrom]= 'Zarpele' ;
$params['options'][$idLabelCustomOptionTo]= 'Zarpeleros' ;
$params['options'][$idLabelCustomOptionMessage]= 'Esto es un mensaje que se guarda como customs options' ;
//Esto es la cantidad
$params['qty']=1;

Mage::getModel('checkout/cart')->addProduct($product, $params);
Mage::getModel('checkout/cart')->save();
?>

Y listo producto, agregado… Mas adelante les mostrare como implementar shadowbox con wordpress (hagan click en la imagen de arriba) en pocos pasos…

Saludos…