Ubercart versus Drupal Commerce

Tras ver hace una semana todas las opciones que existen en el entorno Drupal para construir una solución de comercio electrónico en web, nos hemos reservado para un artículo propio debatir sobre cuál de las dos plataformas integradas vale la pena trabajar: Ubercart o el nuevo aspirante Drupal Commerce. En Innodus vamos a romper una lanza en favor de Ubercart y vamos a explicar el porqué.

Ubercart ha tenido experiencia con 3 versiones de Drupal, Drupal Commerce nos ofrece la imagen de estar más adaptado a Drupal 7 pero no ha conocido otra versión. Ahora viene Drupal 8 y ambos tienen exactamente el mismo reto por delante. Drupal Commerce goza de mucho "momentum" y muchas otras webs que han analizado el mismo tema que motiva esta revisión consideran que se han creado muchas más webs en Drupal Commerce que en Ubercart desde que existe Drupal 7 y lanzando grandes loas a Drupal Commerce como superior a Ubercart. La presencia de la empresa que soporta y crea a Drupal Commerce en todas las DrupalCons hace pensar que Ubercart está muy superado y nada tiene que hacer con su nuevo contendiente, que quedará arrinconado. Drupal 7 lleva ya 2 años entre nosotros y será un buen momento para valorar esta controversia. De entrada, y sin querer desmerecer a Drupal Commerce, nosotros consideramos que Drupal Commerce es tan abiertamente complejo que no nos creemos que se hayan podido montar más webs de comercio electrónico con Drupal Commerce que con Ubercart.

Instalación y plateamiento de cada sistema

Ubercart ofrece en su instalación muchos más módulos y complementos que Drupal Commerce. En ese sentido es más fácil hacer una instalación completa de Ubercart que funcione desde el primer momento. Esa idea podría ser rebatida por Drupal Commerce diciendo que aunque lleve pocos módulos eso quiere decir que es más extensible. Y sería verdad si hubiesen 5 sistemas de atributos, y 7 formatos de gestión de existencias (stocks), y 5 gestores de contenidos distintos, y 6 formas de gestionar diversas monedas, y 4 sistemas de checkout distintos, y 8 módulos distintos de catálogo, y... Pero no, al final hay 1 de cada, 2 como mucho. Es decir, tiene el mismo número de opciones para cada cosa que Ubercart. Y los defensores de Drupal Commerce nos dirían que se puede programar cualquier elemento de gestión a medida porque su estructura lo permite. Si el cliente requiere ese desarrollo y hay el presupuesto para hacerlo se puede hacer igual en Ubercart.

Dicho de otro modo, aunque Ubercart sigue teniendo carencias en ciertas áreas, Drupal Commerce también las sigue teniendo, y casi en las mismas. Ahora mismo parece difícil ver que plataforma tiene más visos de futuro, y en este punto creo que podemos apostar por ambas. Casi seguramente ambas se trasladarán a Drupal 8 y como creo que se montan más tiendas sencillas que complejas, al menos por el momento, ambos tendrán su lugar.

Entre los entusiastas de Drupal Commerce, por lo que se lee en sus blogs técnicos, hay tal sensación de la superioridad de Drupal Commerce que he llegado a leer cosas como que Drupal Commerce es mucho más completo que Ubercart, poniendo como ejemplo que tiene un sistema de atributos que lo hace adecuado para tiendas de ropa (por aquello de la talla y el color). Parece que no han descubierto que el sistema de atributos de Ubercart forma parte de su core de módulos desde la primera versión y que se han montado cientos de tiendas de ropa con productos elegibles por talla y color (nosotros sin ir más lejos hemos montado 4 webs de estas). También es cierto que este sistema tiene sus propias problemáticas de diseño original, pero justamente para el modelo de atributos "talla/color" no representa ningún problema y algunos clientes de Innodus lo pueden atestiguar.

Aunque es cierto que Drupal Commerce es una plataforma más extensible que Ubercart todo el mundo parece estar de acuerdo de que solo cogiendo el módulo de Drupal Commerce y unos cuantos módulos NO puedes montar una tienda online. Esto es tan así que hay un claro reconocimiento que si no empiezas instalando la distribución de Drupal que los propietarios de Drupal Commerce han montado (el famoso "Kickstart") donde ya viene todo montado "de fábrica", pues mucha gente no sería capaz de construir una web con Drupal Commerce. En cambio cuando alguien experto se instala "Drupal Commerce Kickstart" se da cuenta de que Drupal "está escondido", es decir "Drupal Commerce Kickstart" está compitiendo con Magento o PrestaShop, por decir alguno, no está extendiendo a Drupal, está creando su propia interpretación de lo que es un sistema eCommerce, usando a Drupal como base pero sin mostrarlo. Está claro que esto es un punto de vista muy particular de los creadores de Drupal Commerce que quieren "distinguirse" de Drupal. A mí, como integrador de soluciones, desde luego no me ayuda. En cualquier caso, si ya tiene una web construida con Drupal 7, la plataforma Kickstart no le servirá de nada pues es un Drupal independiente. Necesitará estudiarlo para entender qué debe instalar en su propio Drupal y esto puede ser una tarea ardua para muchos.

Con todo hay que recordar cómo nació Drupal Commerce. En cierto punto del desarrollo de Ubercart sus programadores líderes intentaban encontrar soluciones que contentaran una parte más técnica de los usuarios que se topaban con ciertos límites de Ubercart. Es cierto que Ubercart tenía, y sigue teniendo, algunos límites estructurales, que si bien no impiden hacer ciertas cosas, realmente las pueden complicar mucho. En vez de ofrecer una solución "out-of-the-box" que sirviera para todo tipo de sites, el programador líder de Ubercart arrancó una nueva línea que ha acabado siendo Drupal Commerce, en un formato teórico más de "framework". En ese momento ya habían algunas compañías comerciales viviendo de Ubercart y dando soporte, y la principal de ellas (de hecho una empresa de París) le ofreció al creador de Ubercart unirse a ellos en plantilla para seguir liderando el desarrollo de este nuevo ecommerce. En sus inicios Drupal Commerce parecía mucho más limitado que el mismo Ubercart, pues costó mucho tener preparado un sistema que permitiera construir sitios ecommerce potentes. Esta solución no ha hecho más que crecer, consiguiendo atraer mucho interés por parte de la comunidad Drupal, aunque también es cierto que a veces los técnicos nos sentimos atraidos por soluciones complejas con promesas de mucha eficacia y extensibilidad.

Resolviendo problemas, montando una tienda

En esencia ambos sistemas permiten hacer esta lista de cosas (aunque no son las únicas):

  • sistema de creación y gestión de productos
  • catálogo de productos configurable
  • cálculo de impuestos y descuentos
  • capacidad de modificaciones de precios (o multimoneda) bajo ciertas circunstancias
  • gestión de avisos automáticos vía email
  • gestión de cálculo de existencias con avisos
  • carrito de la compra con diversas opciones
  • compra en una sola página, incluso a usuarios anónimos
  • procesamiento de pedidos simple y automatizado con varios estados
  • gestión de las ventas y de los clientes
  • generación de factura de cliente, con versión imprimible
  • informes de ventas, inventorio y clientes
  • sistema de pagos integrado con muchas pasarelas simultáneas
  • venta de productos, de servicios, de ficheros de descarga, de grupos de productos
  • venta de inscripciones, de roles de usuarios o de reservas

En el fondo ambos sistemas intentan resolver el mismo problema y casi de la misma forma en todas sus partes: crear webs que "vendan cosas". Donde más se diferencian es en la gestión de productos y atributos, donde son completamente distintos, sinó opuestos. La gestión de pedidos, por ejemplo, es más similar de lo que parece, y aunque puede que sea más extensible en Drupal Commerce está un poco por demostrar que realmente sea así, al menos comparándolo con Ubercart 3 sobre Drupal 7. Y decimos esto porque extender el sistema de pedidos no es algo que pueda hacer un usuario sin conocimientos sea la plataforma que sea.

Se critica de Ubercart que es difícil controlar niveles de existencias, cuando lo que es difícil no es la forma en que Ubercart lo hace, sinó que sencillamente es difícil controlar niveles de existencias en los productos. Ubercart no da muchas alternativas, pero es que Drupal Commerce tampoco tiene tantas, lo cual no es para extrañarse ni en uno, ni en el otro caso. Este área puede ser tan importante para una organización que puede dar pie sencillamente a que encargue el desarrollo de un módulo de control de existencias propio, perfectamente adaptado a sus necesidades, independientemente de usar Drupal Commerce o Ubercart. Y es que la complejidad de la gestión y su forma de adaptarse a los modelos de negocio de una empresa son algo que puede variar tanto en cada proyecto que cualquier plataforma ecommerce puede verse en apuros en este punto.

Ubercart lleva tanto tiempo existiendo que la lista de pasarelas de pago o de gestión de envíos es muy extensa. Durante mucho tiempo esto ha sido una carencia muy crítica de Drupal Commerce, no se si incluso a día de hoy ya hay pasarela para proveedores tan importantes como FedEx o Google Merchant.

Comercio electrónico multidioma

Justamente una de las cosas que siempre se discutieron en Ubercart fue su capacidad para crear tiendas en formato multidioma. Hay que decir que las capacidades de crear tiendas multidioma con Ubercart han aumentado de la versión 1 a la 2, y a la 3 en proporción como estas capacidades han aumentado de Drupal 5 al 6, y al actual 7. Con todo siguen haciendo falta algunos truquillos de veterano para solventar todas las situaciones en las que se requiere tener una web multidioma perfectamente sincronizada y traducida en una web con varios idiomas.

En el núcleo del problema está el hecho de que cada producto es un nodo, y cada nodo/producto tendrá un valor único de referencia de catálogo. Lo cierto es que una búsqueda de este tema en Google nos mostrará la gran cantidad de usuarios preguntando cómo construir una web multidioma con Drupal Commerce, porque, ni es tan óbvio, ni la gente encuentra el camino tan fácilmente. Quizá en este punto vale la pena entender que las dificultades para manejarse con un tema así serán muy diferentes para usuarios expertos (generalmente los profesionales que se dedican a tiempo completo al desarrollo de webs) de los que crean webs ocasionalmente (sean profesionales con otros perfiles o empresas que se crean su propia web). En términos generales hay que entender que los expertos que cuentan en su equipo con programadores serán capaces de encontrar una solución a estas limitaciones tanto en el caso de una plataforma como de la otra.

Por tanto, hoy por hoy, las capacidades multidioma de ambas plataformas dependen igualmente de las capacidades multidioma de Drupal. Ciertamente la forma de abordar los atributos de Ubercart puede dificultar un poco más las cosas, pero cuando se han hecho muchas tiendas se ve que cada tienda es un mundo y puede funcionar de diversas formas. No es lo mismo una tienda de libros, que de objetos de regalo, o de ropa, o de piezas para coches, o un sistema de reserva de entradas. En cada caso la forma en cómo abordar las complejidades del multidioma puede ser completamente distinta.

Esto nos lleva también a comentar que la capacidad de importar un sitio ecommerce hecho en otra plataforma es casi tan alta en Ubercart como en Drupal Commerce. Esto es así porque no se importan tan solo nombres de productos y textos, puede ser necesario importar características como atributos y códigos de referencia de producto, que es donde más problemas podemos encontrar, si es que debemos importar grandes cantidades de productos.

Modelo de crecimiento de cada plataforma

Se ha supuesto que el modelo de apoyo a cada plataforma favorece a Drupal Commerce. Ubercart es sostenido por una comunidad Open Source, con su propia web, pero cuando uno mira esa web parece un poco "amateur". En cambio Drupal Commerce es sostenido por una empresa dedicada exclusivamente a su desarrollo y promoción. Cuando uno entra en esta web se ve un site muy bien contruido y diseñado, lleno de recursos formativos. Comparando ambas webs uno podría llegar a creer que Drupal Commerce tiene mejores espectativas de futuro que Ubercart, y de lejos.

Curiosamente es interesante destacar que en su proceso sobre la versión 7 de Drupal, la plataforma Drupal Commerce ya ha pasado de la versión 1 a la 2, es decir, ya ha tenido que reformularse a sí mismo antes de que Drupal 7 haya acabado su ciclo natural de desarrollo.

Pues lo cierto es que vale la pena tener en cuenta que cuando Ubercart se traslado a Drupal 7 lo hizo manteniendo su formato general. Todo funciona igual, la gestión es la misma, hay mejoras, pero el aire "de continuidad" es innegable, nadie que haya usado Ubercart 1 o 2 se va a sentir raro en Ubercart 3. A nivel de programación siguen habiendo los mismos "hooks" (ganchos para extender funciones de forma estándar y simplificada, típicos de Drupal) y unos cuantos nuevos. Pero lo importante es que por debajo ha habido un salto tecnológico enorme: todos los listados no son programados por código propio sino que funcionan en Views (desde el catálogo a la gestión de pedidos, aunque es cierto que aún se puede extender hasta áreas donde Drupal Commerce 2 también se ha extendido como los pedido o el checkout). Por otra parte los campos de los productos, el carrito o los pedidos no son propios, ahora son entidades de Drupal y son extensible por cualquier medio estándar de Drupal. Además las reacciones a acciones o eventos ya no funcionan con un módulo propio como antes (Conditional Actions), sinó que requieren el uso del fantástico y usadísimo sistema Rules.

¿Qué quiere decir todo esto? Varias cosas. Una que Ubercart es muy extensible, cualquiera puede añadir nuevos campos, mejorar los listados (o hacer de nuevos) y crear nuevos emails o normas de pago o impuestos, porque se hacen con herramientas estándares de Drupal. Esto es una gran comodidad. Pero a mí, como programador de Drupal con años de experiencia, me dice que los programadores de Ubercart han hecho un salto tecnológico enorme adaptándose con mucha precisión a la plataforma Drupal 7. Hay que reconocerle el mérito aunque la web de Ubercart no sea tan bonita.

Conclusiones

Todo este análisis no busca desconsiderar a Drupal Commerce, en absoluto. Drupal Commerce es una plataforma muy potente, compleja y sofisticada para crear webs de comercio electrónico basadas en Drupal. Pero justamente creemos que sirve mejor en casos en los que haya que crear un sistema ecommerce potente y complejo, es decir cuando no se pueda crear con Ubercart. Y esto es así porque la rapidez con la que desarrollar un sitio ecommerce y la facilidad para mantenerlo pueden ser argumentos de mucho peso para elejir un entorno u otro.

La plataforma Ubercart en sí misma nació con grandes ideas dentro de sí misma pero también con otras que limitan su evolución. Los programadores a cargo del proyecto han ido solventado algunas con el tiempo, pero los recursos para solventarlas todas son tan enormes que aún quedan áreas de Ubercart que pueden mejorar, si bien no para los usuarios, sí para que los desarrolladores puedan crear soluciones más potentes.

En muchas ocasiones se critica que la mitad de las webs construidas con Ubercart están hechas con Drupal 6, es decir, son antiguas, pero creemos ver en ello más una virtud que un defecto: las webs hechas con Ubercart duran mucho porque es un buen sistema. Es evidente que todo depende de cómo se enfoque el asunto.

Por mucho que podamos encontrar argumentos que enfrenten estas dos potentes plataformas eCommerce de Drupal es muy interesante observar que son mucho más parecidas entre ellas de lo que lo pueden llegar a ser las plataformas eCommerce para Wordpress, que, en esencia ni se parecen en nada, ni comparten recursos. Las plataformas eCommerce discutidas aquí para Drupal podrían llegar a estar instaladas juntas y podrían compartir elementos del mismo Drupal, quizá incluso encontrariamos que a la hora de programar nuevas soluciones no es tan diferente el código de una como de la otra.

Drupal 7 va a seguir con nosotros bastante tiempo, y ambas plataformas ecommerce ya se están preparando para Drupal 8. Veremos lo que tiempo nos depara, de momento disponemos de potentes herramientas para conseguir llevar a cabo nuestras necesidades de comercio electrónico. El papel de un consultor es el de analizar los requerimientos para poder recomendar la mejor solución, en este caso Ubercart o Drupal Commerce, teniendo en cuenta todos los factores para llevar al mayor éxito el proyecto de su cliente.