<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Sobre mí on DIAZWATSON</title><link>https://diazwatson.com/es/</link><description>Recent content in Sobre mí on DIAZWATSON</description><generator>Hugo</generator><language>es-ES</language><lastBuildDate>Wed, 15 Jul 2026 10:00:00 +0000</lastBuildDate><atom:link href="https://diazwatson.com/es/index.xml" rel="self" type="application/rss+xml"/><item><title>De Grav a Hugo</title><link>https://diazwatson.com/es/blog/grav-to-hugo/</link><pubDate>Wed, 15 Jul 2026 10:00:00 +0000</pubDate><guid>https://diazwatson.com/es/blog/grav-to-hugo/</guid><description>&lt;p&gt;Durante años este blog corrió sobre &lt;a href="https://getgrav.org/" target="_blank" rel="noopener noreferrer"&gt;Grav&lt;/a&gt;
, un CMS flat-file muy agradable. Sin base de datos,
solo archivos Markdown, cosa que siempre me gustó. Pero aun así necesita hosting con PHP, actualizaciones y el arreglo
ocasional de algún plugin, y me di cuenta de que pasaba más tiempo manteniendo el sitio que escribiendo en él. Así que lo
reconstruí como un sitio estático con &lt;a href="https://gohugo.io/" target="_blank" rel="noopener noreferrer"&gt;Hugo&lt;/a&gt;
. Aquí va el por qué y el cómo.&lt;/p&gt;</description></item><item><title>Warden</title><link>https://diazwatson.com/es/blog/warden/</link><pubDate>Sun, 01 Sep 2024 09:00:00 +0000</pubDate><guid>https://diazwatson.com/es/blog/warden/</guid><description>&lt;p&gt;Durante años lo corrí todo de forma nativa en macOS y más tarde me pasé a &lt;a href="../valet-plus"&gt;Valet Plus&lt;/a&gt;
. Era rápido, pero
también ataba mi máquina a versiones específicas de PHP, MySQL y del motor de búsqueda, y cada proyecto que necesitaba un
stack un poco distinto significaba pelearse con el host. Hoy en día uso &lt;a href="https://warden.dev/" target="_blank" rel="noopener noreferrer"&gt;Warden&lt;/a&gt;
 y no miro atrás.&lt;/p&gt;</description></item><item><title>Como: Migrar datos de Magento2 Commerce a Magento2 CE</title><link>https://diazwatson.com/es/blog/m2-data-migration/</link><pubDate>Thu, 24 Aug 2023 22:52:00 +0000</pubDate><guid>https://diazwatson.com/es/blog/m2-data-migration/</guid><description>&lt;p&gt;Hace poco me pidieron trabajar en una migración de datos desde &lt;strong&gt;Adobe Commerce 2.3.7-p3&lt;/strong&gt; hacia una instancia de &lt;strong&gt;Magento Community 2.4.3-p2&lt;/strong&gt;.
He hecho tareas similares en el pasado usando la &lt;a href="https://github.com/magento/data-migration-tool" target="_blank" rel="noopener noreferrer"&gt;Herramienta oficial de Migración de Datos de Magento (MDMT)&lt;/a&gt;
, así que esa fue mi arma elegida.
En las siguientes líneas intentaré describir el proceso.&lt;/p&gt;</description></item><item><title>Como: Crear un tipo de producto bundle personalizado en Magento 2</title><link>https://diazwatson.com/es/blog/custom-bundle-product/</link><pubDate>Mon, 29 Nov 2021 22:52:00 +0000</pubDate><guid>https://diazwatson.com/es/blog/custom-bundle-product/</guid><description>&lt;p&gt;En un proyecto reciente el producto bundle nativo era &lt;em&gt;casi&lt;/em&gt; lo que necesitábamos, pero no del todo. En lugar de
pelearme con el modelo del bundle a base de plugins por todas partes, decidí crear un tipo de producto personalizado
que herede de él y solo cambie las partes que me importaban.&lt;/p&gt;</description></item><item><title>Contribuciones al Codigo de Magento 2</title><link>https://diazwatson.com/es/blog/m2-core-contributions/</link><pubDate>Fri, 15 Nov 2019 10:00:00 +0000</pubDate><guid>https://diazwatson.com/es/blog/m2-core-contributions/</guid><description>&lt;p&gt;Siempre he creído que la mejor manera de aprender de verdad un framework es trabajar en el framework mismo. Así que poco
después de entrar en &lt;a href="https://www.space48.com/" target="_blank" rel="noopener noreferrer"&gt;Space48&lt;/a&gt;
 en Manchester, empecé a contribuir al repositorio de Magento 2
— pequeños pull requests aquí y allá.&lt;/p&gt;</description></item><item><title>El ColorPicker Ui Component</title><link>https://diazwatson.com/es/blog/colorpicker-ui-component/</link><pubDate>Mon, 08 Jul 2019 22:52:00 +0000</pubDate><guid>https://diazwatson.com/es/blog/colorpicker-ui-component/</guid><description>&lt;p&gt;Como parte de las contribuciones que estoy haciendo actualmente al proyecto &lt;a href="https://github.com/magento/adobe-stock-integration" target="_blank" rel="noopener noreferrer"&gt;Adobe Stock Integration&lt;/a&gt;

hace poco tuve que implementar un filtro de búsqueda para el atributo de color.&lt;/p&gt;</description></item><item><title>Como: Actualizar atributos de producto en Magento 2</title><link>https://diazwatson.com/es/blog/m2-update-product-attributes/</link><pubDate>Mon, 15 Apr 2019 07:44:00 +0000</pubDate><guid>https://diazwatson.com/es/blog/m2-update-product-attributes/</guid><description>&lt;p&gt;Una vez tuve que actualizar un solo atributo en miles de productos a partir de una importación de datos. Mi primer
instinto fue cargar cada producto con el repository, asignar el valor y guardarlo, y funcionó&amp;hellip; pero era dolorosamente
lento. Cargar y guardar un producto completo solo para cambiar un atributo es mucho trabajo desperdiciado. Existe una
herramienta mucho mejor para esto.&lt;/p&gt;</description></item><item><title>Como: Crear email templates personalizados en Magento 2</title><link>https://diazwatson.com/es/blog/m2-custom-email-templates/</link><pubDate>Fri, 15 Mar 2019 13:28:00 +0000</pubDate><guid>https://diazwatson.com/es/blog/m2-custom-email-templates/</guid><description>&lt;p&gt;En el &lt;a href="../m2-send-emails-programmatically"&gt;post anterior&lt;/a&gt;
 mostré cómo enviar un email programáticamente, pero dejé una
pieza fuera a propósito, la plantilla. Aquí te muestro cómo registro una plantilla de email personalizada que viene con
el módulo y que aún así puede ser sobreescrita por el comerciante desde el admin.&lt;/p&gt;</description></item><item><title>Como: Enviar Emails Programaticamente en Magento 2</title><link>https://diazwatson.com/es/blog/m2-send-emails-programmatically/</link><pubDate>Fri, 15 Feb 2019 10:12:00 +0000</pubDate><guid>https://diazwatson.com/es/blog/m2-send-emails-programmatically/</guid><description>&lt;p&gt;Tarde o temprano todo proyecto necesita enviar un email que Magento no envía por defecto, una notificación a un admin,
un recordatorio a un cliente, un reporte al almacén. La buena noticia es que Magento nos da un servicio limpio para
hacerlo, el &lt;code&gt;TransportBuilder&lt;/code&gt;. Déjame mostrarte la configuración que uso.&lt;/p&gt;</description></item><item><title>Valet Plus</title><link>https://diazwatson.com/es/blog/valet-plus/</link><pubDate>Tue, 22 Jan 2019 20:02:00 +0000</pubDate><guid>https://diazwatson.com/es/blog/valet-plus/</guid><description>&lt;p&gt;Escuché acerca de &lt;a href="https://github.com/weprovide/valet-plus" target="_blank" rel="noopener noreferrer"&gt;Valet Plus&lt;/a&gt;
 hace algún tiempo y tengo que admitir que no presté mucha atención al tema.&lt;/p&gt;
&lt;p&gt;Cuando trabajas en una agencia, cada minuto cuenta y si tu entorno de desarrollo local no funciona y tienes que pasar tiempo reparándolo, estás muert@!.&lt;/p&gt;</description></item><item><title>Como: Crear una pagina de success diferente para un método de pago en Magento2</title><link>https://diazwatson.com/es/blog/m2-how-to-creat-an-alternative-success-for-a-payment-method/</link><pubDate>Sat, 19 Jan 2019 01:26:00 +0000</pubDate><guid>https://diazwatson.com/es/blog/m2-how-to-creat-an-alternative-success-for-a-payment-method/</guid><description>&lt;p&gt;Esta semana, me asignaron la tarea de crear una página de success diferente para un método de pago específico.&lt;/p&gt;
&lt;p&gt;La idea era que si un cliente seleccionaba el método de pago Transferencia Bancaria, fuese redirigido a
&lt;code&gt;https://magento2.test/checkout/banktransfer/success&lt;/code&gt;.
Por el contrario si el cliente selecciona cualquier otro método de pago, debería ser redirigido a la página de success por defecto,
es decir &lt;code&gt;https://magento2.test/checkout/onepage/success/&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Como: Crear un Cron Job en Magento 2</title><link>https://diazwatson.com/es/blog/m2-create-a-cron-job/</link><pubDate>Sat, 15 Dec 2018 10:46:00 +0000</pubDate><guid>https://diazwatson.com/es/blog/m2-create-a-cron-job/</guid><description>&lt;p&gt;Hace algún tiempo necesitaba ejecutar una tarea de forma automática todas las noches para limpiar unos registros
antiguos de una tabla personalizada. La herramienta obvia para esto es un cron job, pero si vienes de Magento 1 la
sintaxis cambió un poco, así que déjame mostrarte cómo lo configuré.&lt;/p&gt;</description></item><item><title>Como: Crear un Payment Method en Magento 2</title><link>https://diazwatson.com/es/blog/m2-payment-method/</link><pubDate>Thu, 15 Nov 2018 00:00:00 +0000</pubDate><guid>https://diazwatson.com/es/blog/m2-payment-method/</guid><description>&lt;p&gt;Recientemente me asignaron la tarea de crear un método de pago personalizado para un proyecto. Mientras investigaba
descubrí que hay dos maneras de crear un método de pago en Magento 2.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;La forma antigua, similar a como se hacía en M1, extendiendo &lt;code&gt;AbstractMethod&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;La forma nueva, usando el &lt;a href="https://developer.adobe.com/commerce/php/development/payments-integrations/payment-gateway/" target="_blank" rel="noopener noreferrer"&gt;Payment Provider Gateway&lt;/a&gt;
.&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>El Enemigo de Magento</title><link>https://diazwatson.com/es/blog/the-magento-hater/</link><pubDate>Thu, 11 Oct 2018 19:43:00 +0000</pubDate><guid>https://diazwatson.com/es/blog/the-magento-hater/</guid><description/></item><item><title>Como: Crear una llamada a la API REST de Magento 2</title><link>https://diazwatson.com/es/blog/m2-create-a-rest-api-call/</link><pubDate>Thu, 11 Oct 2018 14:30:00 +0000</pubDate><guid>https://diazwatson.com/es/blog/m2-create-a-rest-api-call/</guid><description>&lt;p&gt;Estos fragmentos de código te mostrarán cómo solicitar a la API REST de Magento2 y recuperar algunos datos.
En este ejemplo, consultaré a la API REST de Magento2 para recuperar todos los productos actualizados desde &lt;code&gt;2018-10-09 00: 00: 00&lt;/code&gt;.&lt;/p&gt;
&lt;div class="callout callout--note"&gt;
&lt;p&gt;Este método asume que:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Estás usando un usuario admin para generar el token de autenticación.&lt;/li&gt;
&lt;li&gt;Tienes una instancia de Magento2 corriendo en tu entorno local.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description></item><item><title>Como: Crear un Shipping Method en Magento 2</title><link>https://diazwatson.com/es/blog/m2-shipping-method/</link><pubDate>Sat, 15 Sep 2018 07:37:00 +0000</pubDate><guid>https://diazwatson.com/es/blog/m2-shipping-method/</guid><description>&lt;p&gt;Hace un tiempo necesitaba un método de envío personalizado con una tarifa que dependía de algunas de nuestras propias
reglas de negocio. El flat rate nativo no era lo suficientemente flexible, así que construí un pequeño carrier
personalizado. Es una de esas tareas que da miedo la primera vez pero que en realidad queda muy ordenada una vez que
conoces las tres piezas involucradas.&lt;/p&gt;</description></item><item><title>Como: Crear Extension Attributes en Magento 2</title><link>https://diazwatson.com/es/blog/m2-extension-attributes/</link><pubDate>Wed, 15 Aug 2018 00:00:00 +0000</pubDate><guid>https://diazwatson.com/es/blog/m2-extension-attributes/</guid><description>&lt;p&gt;Los extension attributes son uno de esos conceptos de Magento 2 que suenan complicados pero que encajan en el momento
en que los usas una vez. Te permiten agregar datos a una entidad existente (una orden, un cliente, un producto)
&lt;strong&gt;sin&lt;/strong&gt; reescribir su modelo, y viajan muy bien a través de la API, que es donde realmente brillan.&lt;/p&gt;</description></item><item><title>Como: Hacer un Join de 2 tablas en Magento 2</title><link>https://diazwatson.com/es/blog/m2-join-tables/</link><pubDate>Mon, 02 Jul 2018 00:00:00 +0000</pubDate><guid>https://diazwatson.com/es/blog/m2-join-tables/</guid><description>&lt;p&gt;Recientemente me enfrenté a una situación en la que necesitaba la información de una segunda tabla en mi colección
y el primer pensamiento que cruzó por mi mente fue: &lt;em&gt;reescribir la colección para agregar mi propia lógica&lt;/em&gt;, pero &amp;hellip; ¿Es ese realmente
el enfoque correcto?&lt;/p&gt;
&lt;p&gt;En primer lugar, reescribiendo la clase de colección principal, voy a afectar a todos los lugares en donde se use esa
colección y no necesito eso, en segundo lugar, toda la idea de reescribir las cosas me parece mal, en especial, teniendo mecanismos como los observers
y plugins disponibles para inyectar lógica personalizada de una manera no intrusiva, por lo que probablemente reescribir NO sea lo mejor que se puede hacer.&lt;/p&gt;</description></item><item><title>Como: Admin Grid en Magento 2 usando Ui Components</title><link>https://diazwatson.com/es/blog/m2-admin-grid-ui-component/</link><pubDate>Tue, 12 Jun 2018 00:00:00 +0000</pubDate><guid>https://diazwatson.com/es/blog/m2-admin-grid-ui-component/</guid><description>&lt;p&gt;Recientemente me asignaron la tarea de crear un admin grid para que los usuarios pudieran administrar los registros de una entidad personalizada desde el backoffice.&lt;/p&gt;
&lt;p&gt;Aunque había leído y escuchado bastante sobre el tema, nunca había tenido la oportunidad de construir uno yo mismo, porque ninguna de las tareas que me habían asignado antes lo requería.&lt;/p&gt;</description></item><item><title>Como: Mostrar mensajes de Success, Error y Warning en Magento 2</title><link>https://diazwatson.com/es/blog/m2-addsuccess-adderror-addnotice/</link><pubDate>Tue, 12 Jun 2018 00:00:00 +0000</pubDate><guid>https://diazwatson.com/es/blog/m2-addsuccess-adderror-addnotice/</guid><description>&lt;p&gt;Para hacer uso de los mensajes de diálogos en nuestros desarrollos debemos utilizar &lt;code&gt;\Magento\Framework\Message\ManagerInterface&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;La mejor manera de utilizar esta interfaz es mediante Inyección de Dependencias añadiéndola al constructor de la siguiente manera:&lt;/p&gt;</description></item><item><title>Como: Usar el InsertListing Ui Component en Magento 2</title><link>https://diazwatson.com/es/blog/m2-insertlisting-component/</link><pubDate>Tue, 15 May 2018 00:00:00 +0000</pubDate><guid>https://diazwatson.com/es/blog/m2-insertlisting-component/</guid><description>&lt;p&gt;De vez en cuando necesitas embeber un grid &lt;em&gt;dentro&lt;/em&gt; de un formulario, piensa en la pantalla de &amp;ldquo;agregar productos a una
categoría&amp;rdquo;, donde un listing te deja marcar los registros que quieres y la selección se guarda con la entidad padre. El
componente que hace esto posible es &lt;code&gt;insertListing&lt;/code&gt;, y es uno de los Ui Components más útiles, y más confusos, de
Magento.&lt;/p&gt;</description></item><item><title>Como: Renderizar un Grid en el Frontend usando un Ui Component en Magento 2</title><link>https://diazwatson.com/es/blog/m2-frontend-grid-ui-component/</link><pubDate>Sun, 15 Apr 2018 00:00:00 +0000</pubDate><guid>https://diazwatson.com/es/blog/m2-frontend-grid-ui-component/</guid><description>&lt;p&gt;Los listing Ui Components están por todas partes en el admin, pero nada te impide renderizar uno en la tienda, una
página de &amp;ldquo;mis descargas&amp;rdquo;, una lista de registros asociados al cliente, ese tipo de cosas. No es algo que se vea todos
los días, así que déjame mostrarte el pequeño truco que lo hace funcionar.&lt;/p&gt;</description></item><item><title>Como: Usar el Form Ui Component en Magento 2</title><link>https://diazwatson.com/es/blog/m2-form-component/</link><pubDate>Thu, 15 Mar 2018 00:00:00 +0000</pubDate><guid>https://diazwatson.com/es/blog/m2-form-component/</guid><description>&lt;p&gt;El Form Ui Component es lo que Magento usa en todas partes en el admin para renderizar las pantallas de edición. La
primera vez que construyes uno se siente como mucho XML para un formulario simple, pero el patrón es siempre el mismo,
así que una vez que lo has hecho una vez puedes hacerlo con los ojos cerrados.&lt;/p&gt;</description></item><item><title>Como: Agregar un Button usando un Ui Component en Magento 2</title><link>https://diazwatson.com/es/blog/m2-button-ui-component/</link><pubDate>Thu, 15 Feb 2018 00:00:00 +0000</pubDate><guid>https://diazwatson.com/es/blog/m2-button-ui-component/</guid><description>&lt;p&gt;Los botones en el admin solían ser una sola línea en Magento 1. En Magento 2, cuando tu página es un Ui Component,
agregas un botón a través del componente: lo declaras en el XML y lo respaldas con una pequeña clase PHP que provee su
configuración. Al principio se siente como más trabajo, pero en realidad es más limpio porque cada botón se vuelve
testeable y reutilizable.&lt;/p&gt;</description></item><item><title>Como: Agregar un campo al formulario de edicion de producto en Magento 2</title><link>https://diazwatson.com/es/blog/m2-add-field-to-product-edit-form/</link><pubDate>Mon, 15 Jan 2018 00:00:00 +0000</pubDate><guid>https://diazwatson.com/es/blog/m2-add-field-to-product-edit-form/</guid><description>&lt;p&gt;Agregar un campo al formulario de edición de producto en el admin es una de esas cosas que la primera vez se siente más
difícil de lo que debería, porque el formulario es un Ui Component y no un layout normal. Una vez que sabes dónde
engancharte, es solo un poco de XML.&lt;/p&gt;</description></item><item><title>Como: Mi entorno de desarrollo</title><link>https://diazwatson.com/es/blog/my-dev-environment/</link><pubDate>Sat, 01 Jul 2017 07:37:00 +0000</pubDate><guid>https://diazwatson.com/es/blog/my-dev-environment/</guid><description>&lt;p&gt;A menudo me preguntan qué uso para desarrollar en local. A lo largo de los años he pasado por Vagrant y Docker, pero
para los proyectos en los que trabajo día a día mantengo todo instalado de forma nativa en macOS. Es rápido, y cuando
algo se rompe sé exactamente dónde mirar. Este es el stack que uso.&lt;/p&gt;</description></item><item><title>Reparando extensiones despues de SUPEE-6788</title><link>https://diazwatson.com/es/blog/m1-fixing-extensions-after-supee-6788/</link><pubDate>Thu, 05 Nov 2015 00:00:00 +0000</pubDate><guid>https://diazwatson.com/es/blog/m1-fixing-extensions-after-supee-6788/</guid><description>&lt;p&gt;Si aplicaste el parche de seguridad SUPEE-6788 a una tienda Magento 1 y de repente la mitad de tus extensiones dejaron
de funcionar, no estás solo. El parche cierra algunos agujeros de seguridad reales, pero al hacerlo cambia unos cuantos
comportamientos de los que muchos módulos de terceros dependían. Estos son los problemas con los que me topé y cómo los
resolví.&lt;/p&gt;</description></item><item><title>N98-Magerun</title><link>https://diazwatson.com/es/blog/n98-magerun/</link><pubDate>Mon, 21 Apr 2014 00:00:00 +0000</pubDate><guid>https://diazwatson.com/es/blog/n98-magerun/</guid><description>&lt;p&gt;&lt;strong&gt;N98-Magerun&lt;/strong&gt; es una utilidad de línea de comandos para entornos (Mac OS / Linux) que permite a los que trabajamos con Magento agilizar muchas de las tareas habituales.&lt;/p&gt;</description></item><item><title>¿Por qué este Blog?</title><link>https://diazwatson.com/es/blog/about-this-blog/</link><pubDate>Tue, 01 Apr 2014 00:00:00 +0000</pubDate><guid>https://diazwatson.com/es/blog/about-this-blog/</guid><description>&lt;p&gt;¿Alguna vez has resuelto un problema complicado, solo para toparte con el mismísimo problema un par de meses después en
otro proyecto y no recordar cómo lo solucionaste la primera vez? A mí me pasa todo el tiempo, y es la razón principal
por la que empiezo este blog.&lt;/p&gt;</description></item><item><title>Política de Privacidad</title><link>https://diazwatson.com/es/privacy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://diazwatson.com/es/privacy/</guid><description>&lt;h4 id="1-introducción"&gt;1. Introducción:&lt;/h4&gt;
&lt;p&gt;Esta Política de Privacidad se aplica a diazwatson.com, un sitio web gestionado por Raul Watson, especializado en frameworks de PHP y desarrollo web.&lt;/p&gt;
&lt;h4 id="2-recopilación-de-datos"&gt;2. Recopilación de datos:&lt;/h4&gt;
&lt;p&gt;Este sitio web puede recopilar información personal, como datos de contacto y datos de uso del sitio, para mejorar su funcionalidad y la experiencia del usuario.&lt;/p&gt;</description></item><item><title>Site Offline</title><link>https://diazwatson.com/es/offline/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://diazwatson.com/es/offline/</guid><description>&lt;p style="text-align: center;"&gt;No se ha detectado conexión a la red.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://diazwatson.com/en/offline/offline.gif" alt="Site Offline" loading="lazy" /&gt;&lt;/p&gt;</description></item></channel></rss>