Cualquier petición a un sistema Magento, es derivada por medio del fichero .htaccess hacia el un punto de entrada común en el fichero index.php. Allí podemos ver como tras algunas comprobaciones iniciales (aplicación instalada, modo mantenimiento, etc.), enseguida es llamado el fichero Mage.php, encargado de la mayor parte de la inicialización del sistema: $mageFilename = […]
Front Controller y Routers en Magento
Cuando una petición (Request) llega a Magento, éste busca un Router que pueda procesar dicha petición. El encargado de conocer los Routers disponibles en el sistema y buscar el Router adecuado para el procesamiento de la petición, es el Front Controller (Mage_Core_Front_Controller), que corresponde a la implementación del patrón de diseño del mismo nombre. Ver […]
Crear un nuevo tipo de producto en Magento
En el siguiente vídeo os muestro el resultado de una de las personalizaciones más complejas que he realizado con Magento. Se trata de crear un nuevo tipo de producto, adicional a los existentes por defecto en Magento (configurables, agrupados, etc.). El nuevo tipo de producto se añade a los ya existentes, que siguen funcionando igualmente, […]
Magento: Filtrar colección de productos
Colección con todos los productos en Magento Con la siguiente colección podemos obtener todos los productos de nuestra tienda Magento: $collection = Mage::getModel('catalog/product')->getCollection(); Colección de productos filtrada por atributo simple en Magento Si queremos filtrar la colección por un atributo simple (de texto, no dropdown o multiselect), como el nombre de un producto, el SKU, […]
Magento: Modificar estado de un producto
Estado habilitado / inhabilitado en Magento Para modificar el estado de un producto en Magento (habilitado o deshabilitado), podemos hacerlo de la siguiente forma: $product = Mage::getModel('catalog/product')->load($id); $product->setStatus(Mage_Catalog_Model_Product_Status::STATUS_DISABLED); $product->save(); Para habilitarlo, como se puede suponer, usaremos la constante Mage_Catalog_Model_Product_Status::STATUS_ENABLED. Estado es stock / fuera de stock en Magento También queremos poder cambiar el estado a […]
Magento: cambiar código de un atributo
El código de cualquier atributo en Magento es un valor de sólo lectura, y una vez establecido no es posible modificarlo… desde el administrador… Cambiar el código de un atributo en Magento es tan sencillo como ir a la base de datos y buscar el atributo en la tabla eav_attribute. Allí podemos cambiarlo con las […]
Error en Magento: Mage registry key “_singleton/core/resource” already exists
Hoy se ha producido un error en una de las tiendas Magento que gestionamos. Nunca lo habíamos visto hasta ahora, pero hemos estado investigando cómo solucionarlo y os dejamos aquí nuestras conclusiones: El problema se presentaba al intentar acceder a cualquier lugar de la tienda, tanto en el frontend como en el backend de Magento […]
Optimización de Magento: Full Page Cache
Magento en general, es conocida como una plataforma lenta. Algunos dicen que es intencionado. La gente de Varien (la empresa que desarrolla Magento), ofrece una versión de pago que sí es realmente rápida. El problema es el precio que tiene, de unos módicos 10.000 euros al año. Las diferencias entre ambas plataformas son bastantes, pero […]
Magento: Obtener productos simples de un configurable
Otro snippet muy utilizado en Magento es obtener la lista de productos simples correspondientes a un producto configurable. Una vez tenemos cargado el producto simple es muy sencillo: // Obtener productos simples para el configurable $productTypeIns = $product->getTypeInstance(true); $childIds = $productTypeIns->getChildrenIds($product->getId()); En el array $childIds obtenemos un array con todas las opciones configurables del producto […]
Magento: Colección de productos filtrados por marca
En Magento, para obtener una colección de productos de la tienda filtrados de una determinada forma, se utiliza habitualmente una consulta como la siguiente: // Todos los productos de una marca $collection = Mage::getModel('catalog/product')->getCollection() ->addAttributeToSelect('name') ->addAttributeToSelect('manufacturer') ->addAttributeToFilter(array( array('attribute'=>'manufacturer', 'eq'=>$marca) )); El problema surge siempre con el valor que debe tomar la variable marca, ya que […]
Magento: Obtener opciones de un atributo
Un pequeño snippet para Magento que permite obtener todas las opciones de un determinado atributo tipo Dropdown o Multiselect. // Atributo del que deseamos obtener todas las opciones $attribute = Mage::getModel('eav/entity_attribute')->loadByCode('catalog_product', 'manufacturer'); // Obtenemos la colección de opciones $values = Mage::getResourceModel('eav/entity_attribute_option_collection') ->setAttributeFilter($attribute->getData('attribute_id')) ->setStoreFilter(0, false); // Recorremos la colección y la tratamos $lista = array(); foreach […]
Reset de permisos en Magento con chmod
Cuando movemos una instalación de Magento a otro hosting o cuando realizamos ciertas operaciones en el servidor Web, puede que empecemos a tener algunos problemas con nuestra tienda Magento, como por ejemplo: Errores tipo 5xx, que impiden que la tienda funcione correctamente. Imágenes que no se muestran en la tienda pero existen en el administrador. […]