Recent Posts

Magento 2

 

m2-project

La expansión en uso y popularidad de Magento en los últimos años ha ido a un ritmo bastante rápido. Gracias a eso, el equipo de desarrollo de esta plataforma se ha visto en la necesidad de acelerar el desarrollo de la siguiente versión
MAGENTO 2.
Se está trabajando en mejorar varios puntos, entre los que destacan:

  • Procesos limpios y transparentes
  • Calidad mejorada en el catalogo de productos
  • Mejoras en escalabilidad y rendimiento
  • Mejoras en cuestiones de seguridad
  • Mejoras en las Web Api’s
  • Soporte multilenguaje
  • Mejoras en la arquitectura modular
Y lo mejor de todo, Magento nos promete una curva de aprendizaje mucho menor, y mas material de referencia para los desarrolladores 😀
Otros temas muchos mas específicos de los que se nos ha hecho saber son:
Magento con Github
Ahora los desarrolladores podrán contribuir de una manera mas cercana, descargando un branch del código de Magento 2, encontrando bugs y agregando cosas nuevas. Como todos sabemos en el mundo del software libre, la clave está en la contribución.
Nueva estructura de archivos
Ha llegado el momento de olvidarnos de la estrutura app/design/frontend/base/tema . De ahora en adelante Magento2 no buscará las plantillas que no se encuentren en nuestro tema activo en base, si no que ahora Magento buscará en otro lugar, ya no existirá el tema base. En lugar de eso, la estructura de las vistas ( templates y layouts) será movida a la estructura modular. Por ejemplo:
La vista del catálogo ahora se encontrará en:
app/code/core/Mage/Catalog/view/frontend/product/view.phtml y en lugar de tener catalog.xml dentro de la carpeta /layout, ahora tendremos un archivo layout.xml dentro de cada carpeta vista del módulo.
  Esto es para tener una estructura de archivo mucho mas limpia y sencilla de comprender
Nuevos elementos en el layout

Magento2 agrega el nuevos concepto de containers:

  • Containers pueden contener bloques
  • Containers pueden contener otros containers
  • Containers pueden renderizar todos los childrens

La idea detrás de este nuevo concepto es tener una estructura lógica nueva y clara para organizar los bloques y definir secciones del layout. Los containers serán usados en su gran mayoría por el editor de diseño para poder manipular de una manera más sencilla los bloques

jQuery finalmente reemplaza a prototype

Cuando Magento comenzó, jQuery no era la libreria tan robusta que es ahora, es por esto que en aquellos años se opto por utilizar a prototype como la libreria javascript nativa para el framework. Después de mucho pedirlo por la comunidad de Magento, finalmente tendremos a jQuery como el framework nativo de javascript. Cabe mencionar, que aun contará con soporte con prototype.

Adiós a los nombres de métodos factoriales
Si te costo mucho tiempo aprenderte la manera de nombrar o hacer uso de los nombres de los métodos factoriales, te tengo una mala noticia, esto desaparecerá, a partir de Magento2, la manera en que hacemos:
Mage::getModel(‘catalog/product’) ya no funcionará, a partir de Magento2 tendremos que utilizar el nombre de la clase por completo haciéndolo de está manera:
 Mage::getModel(‘Mage_Catalog_Model_Product’) Al igual que todas las class names de las tablas eav.* Afortunadamente Magento no se olvida de su comunidad de programadores, y se han desarrollado varios métodos para realizar las migraciones sin problemas, creando una serie de herramientas ubicadas en /dev/tools/migration Las cuales buscarán todas las llamadas con el nombre factorial anterior y reemplazandolas por las nueva manera de invocarlas con el nombre de la clase completa incluyendo el namespace.
Y estos, son solo algunas de las características que nos esperan. Sigamos esperando con ansias la salida de Magento2.

Magento: Obtener las subcategorias

La manera en que podemos cargar las subcategorias en base a la id de una categoría que conozcamos, lo hacemos de la siguiente manera.

$children = Mage::getModel('catalog/category')->getCategories($_category->getId()); 
foreach ($children as $category){
    $cat = Mage::getModel('catalog/category')->load($category->getId()); ?>
    // En caso de que queramos imprimir la imagen thumbnail
    // echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA) . 'catalog' . '/' . 'category/' .$cat->getThumbnail();
    echo $cat->getName();
}

Saludos

Magento: Obtener los productos mas vendidos

Para poder obtener una colección de los productos mas vendidos, simplemente hacemos una clase como la siguiente:

<?php
class Mage_Catalog_Block_Product_Bestseller extends Mage_Catalog_Block_Product_Abstract
{
    public function __construct()
    {
    parent::__construct();

    $storeId = Mage::app()->getStore()->getId();

    $products = Mage::getResourceModel('reports/product_collection')
        ->addOrderedQty()
        //->addAttributeToSelect('*')
        ->addAttributeToSelect(array('name', 'price', 'small_image', 'short_description', 'description'))       
        ->setStoreId($storeId)
        ->addStoreFilter($storeId)
        ->setOrder('ordered_qty', 'desc'); //Los mas vendidos arriba

    Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($products);
    Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($products);

    $this->setProductCollection($products);

    }
}

Saludos.

Magento: Obtener nombre del método de Pago

Para obtener el método de pago actual, de una orden o de un quote, lo hacemos de la siguiente manera:

$payment = $order->getPayment()->getMethodInstance()->getTitle();

O si queremos obtener el código del método de pago:

$payment = $order->getPayment()->getMethodInstance()->getCode();

Aprendiendo Magento: Crear un módulo I

En esta sesión veremos como crear un módulo básico en Magento, esta plataforma se destaca por ser bastante escalable y flexible. Primero que nada, para poder comenzar a desarrollar un módulo en Magento hay que tener claros varios conceptos:

Magento es una plataforma modular: Esto nos facilita su escalabilidad, permitiendo agregar y quitar módulos como sistemas independientes.

Magento es una plataforma orientada a los eventos: El uso de eventos es algo bastante útil, ya que a través de los eventos, podemos extender la funcionalidad de nuestro sitio.

Magento es una plataforma MVC: Esta basada en un sistema Modelo – Vista – Controlador, la diferencia radica en la vista, ya que Magento divide la vista en 3 capas; Layouts, Bloques y templates. Ademas de cambia la lógica de la capa que interactua con el modelo de negocios, ya que en lugar de que el controller sea el encargado de obtener los datos de los modelos, en Magento lo hacen los Bloques.

La estructura de archivos:

  • app: Almacena la aplicación de Magento, dividiendolo en 3 áreas (Codepools) : Local, Community y Core:
    •     Local: Todos nuestros desarrollos serán almacenados en esta carpeta
    •     Community: Aquí se almacenaran los módulos que descarguemos de Magento Connect
    •     Core: En esta área encontraremos todo el código nativo de Magento, se recomienda nunca  modificar algún archivo de este codepool, ya que en el momento de que Magento lancé alguna actualización y nosotros la apliquemos, los cambios que nosotros hayamos hecho en esta carpeta, se verán sobreescritos, y por tanto, perderemos el trabajo realizado.
  • media: Los archivos que ingresemos desde el CMS del Backend serán almacenados en esta carpeta, como por ejemplo, las imagenes del catalogo de productos.
  • js: Aqui se almacenan todos las librerías javascript como prototype, que es la librería javascript nativa de Magento, aqui mismo podemos agregar jQuery y más plugins, tal como lo demostramos en: http://www.machakandocodigo.com/magento-incluir-javascript-y-css/
  • skin: En este directorio se almacenan los paquetes referentes a los temas de diseño que vamos a utilizar, es decir, todos nuestros .css se almacenarán en este lugar.
  • var: Almacena los logs, y todos los archivos temporales que necesitemos.

No olviden visitar la siguiente parte donde aprenderemos a crear un Hola mundo en Magento:

Bienvenidos al nuevo sitio www.machakandocodigo.com

Que tal amigos, estamos estrenando sitio con dominio propio 😀

Espero se sientan cómodos en esta nueva plataforma, bienvenidos a los frecuentes y a los nuevos lectores.

Como saben, aquí encontrarán información sobre programación en PHP, MySQL, Drupal, jQuery, y sobre todo Magento!.

Y bueno…  a programar se ha dicho!!

Arreglar SoapFault exception: [HTTP] Unsupported Media Type in /Library/ZendFramework-1.9.0/library/Zend/Soap/Client.php:937

Al usar Zend Framework, y querer hacer uso de la libreria Soap para consumir un WebService, nos podemos llevar un par de sorpresitas. Como en mi caso, fue encontrarme con este error:

SoapFault exception: [HTTP] Unsupported Media Type in /Library/ZendFramework-1.9.0/library/Zend/Soap/Client.php:937

La causa de este error es que la respuesta del servidor, la estamos solicitando como: “application/soap+xml”, y en algunas ocasiones el servidor donde se hospeda el WebService no puede interpretar esta solicitud, por tanto, se la pediremos como “text/xml”.

Para hacer esto, necesitamos hacer un ligero cambio en las opciones de la instancia de nuestro Soap, quedando de la siguiente manera.


$client = new Zend_Soap_Client('http://sitio/ruta?wsdl', array('soap_version' => SOAP_1_1,'encoding'=> 'UTF-8'));


Lo que estamos haciendo, es decirle al Servidor que necesitamos una respuesta de SOAP version 1.1.

Y Así, hemos logrado quitarnos ese error de nuestro código.

Magento: Borrar links del footer

Para eliminar los links del footer en Magento tenemos que editar o crear (si aun no lo tenemos) un archivo layout en nuestro tema actual.

/app/design/base/default/layout/local.xml

Dentro de este, ponemos el siguiente contenido:

<?xml version="1.0"?>
<layout version="0.1.0">
    <reference name = "root">
        <reference name="footer">
            <remove name="footer_links"/>
        </reference>
    </reference>

Y con esto eliminamos los footer links, pero nos damos cuenta que aun quedan 3 los cuales son :

  • About us
  • Customer Service
  • Privacy Policy
Para eliminar estos tres links restantes, nos vamos a nuestro BackEnd, y desde CMS->Static Blocks->Footer links, damos click y dentro cambiamos a status “Disabled”. Guardamos cambios, refrescamos caché y con esto hemos logrado eliminar los links del footer.

Magento: Activar logs de errores

Al momento de hacer debugging en Magento, nos encontramos con que una instalación limpia de Magento no tiene por default los logs activados.
Para lograrlo, nos vamos a nuestro backend->System->Configuration->Developer->Log Settings
Y cambiamos la opción de Enabled a Yes.

Para poder visualizarlos físicamente, nos vamos al directorio de nuestra aplicación, en la carpeta raíz buscamos el directorio de /var/log, y ahí se deben encontrar nuestros archivos con los logs de errores correspondientes.

En dado caso que no se logren a visualizar ni haciendo el proceso anterior, entonces nos vamos a la carpeta /errors localizada también en la raíz del sitio, ahí vamos a copiar y pegar el archivo local.xml.sample y pegarlo con el nombre de local.xml. Y con esto ahora sí, nuestros logs quedarán activados.

Magento: Ver que archivos del core fueron modificados

 Cuando un cliente nos contrata y ya tiene un proyecto en Magento iniciado, es común que muchos otros desarolladores hayan olvidado las buenas prácticas y quizas han modificado archivos del core por innumerables ocasiones.
 Es por esto que debemos comprobar que funcionalidades del core han sido modificadas, para obtener un reporte rápido de estos casos, haremos lo siguiente en nuestra consola de comandos:

$diff -qrbB carpeta_limpia_core carpeta_modificada_del_core

La consola nos mostrara una lista de todas las rutas de archivos encontrados con diferencias:

Magento: muestra de resultados con diff


Y con esto podremos ver que archivos han sido modificados de una manera rápida y sencilla.