Código (SKU) en atributo del artículo del carrito / Reglas Promocionales Magento

codigo_atributo

Si queremos realizar distintas reglas de promoción en Magento, a la hora de establecer dicho descuento en ciertos productos del carrito de la compra, se echa de menos poder seleccionar el SKU del producto en el atributo del artículo del carrito, principalmente por un problema.

Cuando lo realizamos mediante el atributo del producto, en el caso de productos simples que cuelgan de uno configurable, tendremos que introducir el SKU del producto configurable para que el validador de reglas se ‘moleste’ en mirar si alguno de los productos simples que lo componen tiene el SKU en la regla. Sin problema, añadimos el SKU ‘padre’ y listo; pero nos encontramos con que para un producto configurable solamente queremos aplicar ese descuento en uno de los colores, talla del producto. El error es que aplicará también el descuento en los otros productos (simples) de diferentes colores, tallas… inviable!

Leer más »

Barra de estado (status bar) por encima de vista en iOS7

¡Bienvenidos/as a iOS 7!

Aunque no he actualizado todavía mi dispositivo a la versión 7 del famoso Sistema Operativo móvil de Apple (por si las moscas), lo que si he hecho es actualizar el XCode 4.5 al 5, con su correspondiente simulador de iOS 7. Tenía bastante curiosidad por cómo se verían varios desarrollos personales que estoy haciendo con PhoneGap. La primera sorpresa (y creo que no será la única), es la molestia de ver la barra de estado superior por encima de nuestra vista de la aplicación.

Es sencillo, ahora el top:0 y left:0 ya no lo toma según el bottom de la ‘status bar’, sino que coge el 0-0 de toda la pantalla, mostrando eso sí, la barra de estado por encima de la vista de la aplicación. Un efecto bastante molesto, sobretodo si la interface de nuestra aplicación HTML5 dispone del típico header, con botones de menú, back… etc.

Después de estar buscando alrededor de 30 minutos, he dado con varios hilos en ‘stack overflow’ y en los foros de desarrolladores para Apple. La solución es simple, bajar 20px (que es el alto de la status bar) la vista de la aplicación, poniendo fondo negro a la misma y realizar el efecto de ‘status bar’ como en < iOS 7. El problema viene cuando el texto de dicha barra también es negro, por lo que si se quiere mostrar, habrá que ponerlo en blanco.

Añadimos la siguiente porción de código en la función ‘didFinishLaunchingWithOptions’ del AppDelegate.m:

Y continuo a dicha función, pegamos esta otra función, que sirve para el control de la status bar dependiendo de la orientación del dispositivo:

Hasta aquí correcto, nos muestra la vista de la app más abajo, pero falta por poner el texto de la barra de estado en blanco. Nos dirijimos al ‘Info’ de la aplicación en XCode (o al info.plist, que es el fichero de configuración). Añadimos el siguiente valor ‘View controller-based status bar appearance’ y lo seteamos a NO.

He encontrado, al hilo de este ‘problemilla’, a gente que se quejaba de que la barra de estado no se ocultaba cuando así lo quería en su aplicación, el típico fullscreen. Para ello, con la utlización del anterior parámetro, tenéis que estar seguros de que el parámetro ‘Status bar is initially hidden’ del mismo info.plist tiene que estar seteado a  YES, para que en cuanto arranque la aplicación se oculte y permanezca así durante el resto de la ejecución.

A ver con qué seguimos encontrándonos con este iOS7; por el momento en este enlace (Safari on iOS 7 and HTML5: problems, changes and new APIs) hay varios problemas o cambios ya comentados.

Error webservice Magento SOAP v2 con WS-I Compliance

Recientemente, con una tienda que desarrollé y actualmente mantengo, montada en la versión 1.6.2 de Magento, y la cuál tiene una conexión a un ERP interno mediante la API SOAP montado en .NET, parece ser que había un error a la hora de recoger el árbol de categorías (error que salió sin más, de la noche a la mañana).

Parece que tiene que ver con el crecimiento del árbol de categorías (y supongo que de cualquier entidad), dado que cuantas más categorías hay, más crece el resultado de la llamada a la API.

Pues bien, el ERP, al estar montado en .NET, necesita de la activación de WS-I Compliance, para indicarle los tipos de variables y demás definición de tipos. .NET es muy estricto en casi todos los aspectos, ya que necesita que le indiques todo antes de que lo procese. El error que daba, es el típico de que el XML de resultado no está bien formado, o que alguna marca no coincide con la de cierre. Leer más »

Múltiples grupos en entidad cliente (customer) en Magento

Es uno de los requerimientos que más se han solicitado en la versión ‘Community’ de Magento, pero ni en la actual versión estable (1.7) está implementado.

Tan simple como ir a la tabla ‘eav_ttributes’ y buscar el attributo ‘group_id’:

 

Cambiamos el campo ‘backend_type’ por ‘varchar’ y el campo ‘frontend_input’ por ‘multiselect’, indicando que este campo se gestionará mediante la tabla de attributos de entidad, por lo que el campo ‘group_id’ de la entidad customer (en la tabla), quedará sin usar.

Con cualquier consulta a la entidad ‘customer’ los grupos llegarán separados por comas, tipo: 1,6,7 . . .

Si entráis en una ficha de cualquier cliente en el panel de administración, veréis que ahora el seleccionable es múltiple. Seguramente en casi todos los procesos que implique este nuevo dato, tengas que tocar para que reconozca la nueva funcionalidad (yo tuve que tocarlo un poco para temas de reglas de promoción), pero normalmente será convertir el filtro a un valor único por un array, o ‘IN’ . . .

Espero que sea de ayuda.

 

Prevenir ‘bounce’ o ‘scrolling’ en aplicaciones HTML5 con PhoneGap

Algo que resulta muy molesto a la hora de desarrollar aplicaciones HTML5 con PhoneGap, es que se ‘descuadre’ por completo esa sensación de aplicación ‘nativa’ al utilizar la aplicación.

El típico ‘bounce’ que se produce en el UIWebView, realizando ‘touchmove’ en cualquier elemento no scrolleable de la aplicación y viendo cómo se mueve la pantalla, cortando la visualización de la aplicación. Pues bien, se resuelve accediendo al archivo config.xml que haya en nuestro proyecto PhoneGap y en el atributo UIWebViewBounce lo pondremos a ‘false’:

Así, cualquier aplicación que utilice la vista web, no realizará el molesto ‘bounce’.

Eliminar entradas duplicadas en tabla MySQL

Un trozo de query que tenía aquí en mis apuntes del disco duro. Sencillo pero efectivo:

Alteramos los índices de la tabla, así que si tienes otro tipo de índices te toca recordarlos y apuntarlos en la nueva orden.
Mucho mejor si lanzas la query sobre una tabla duplicada (no vayamos a liarla) ;)

Añadir campos a entidad cliente (customer entity) en Magento

Muchas son las veces que necesitamos ‘extender’ los datos de un cliente en Magento, es decir, añadir nuevos campos que personalizan aún mas los datos del cliente para determinados proyectos, sobretodo si nuestra plataforma Magento está conectada con un software de terceros (un ERP por ejemplo). Leer más »

Conexiones a BBDD externas desde Magento

Normalmente, en proyectos de una cierta envergadura, el cliente dispone de sistemas propios ya desarrollados o implementados para realizar otras tareas (ya sea logística, marketing…), por lo que es conveniente una conexión desde una plataforma de e-commerce para compartir información.

A continuación os comento cómo realizar una conexión a una BBDD externa desde Magento.

Primero de todo editamos el archivo ‘local.xml’ que se sitúa en /app/etc/ y le añadimos dentro de la marca < resources> lo siguiente:

Una vez tenéis indicado como se llamará el enlace de conexión, tan sólo tendréis que utilizarlo en vuestro código así:

Añadir captcha a reviews de productos en Magento

Magento no lleva por defecto ningún sistema de captcha, y aunque hay disponibles muchos gratuitos en ‘Magento Connect’, al final siempre acaban dando problemas y pierdes más tiempo en corregirlos y adaptarlos.
Solución: implementar uno desde 0 (o casi).

En este caso vamos a utilizar ‘reCAPTCHA’ de Google, que es muy sencillito y funciona a las mil maravillas (además de que Zend Framework tiene integrado el componente). Para ello es necesario que generes una ‘publicKEY’ y otra ‘privateKEY’. En el siguiente enlace podrás gestionarlo.

Una vez tengamos las ‘keys’, solamente tenemos que implementarlo en nuestro Magento.

Vamos al tema instalado (base para el de por defecto de Magento) y en el archivo de la vista /app/frontend/tema_instalado/default/template/review/form.phtml añadimos:

Simplemente lo que hacemos es llamar al renderizado del componente de Google, embebiendo archivos JS y el HTML. Aqui es donde le podremos indicar las opciones, como tema, idioma… personalizar etiquetas…

Solamente nos falta añadir código de validación en el modelo, para ello vamos a /app/code/local/Mage/Review/Model/Review.php (acordarse de sobrrescribir el model realizando una copia en la carpeta local, de ‘app/core’ a ‘app/local’, buenas prácticas) y en la función validate():

Ya tenemos el captcha funcionando.

Limpiar caché desde consola en Magento

Muchas veces cuando instalamos una nueva extensión o probamos cualquier desarrollo propio, Magento deja de responder y nos sale un error 500 (directamente) o el típico mensaje de error con el número de reporte. Para esto es aconsejable borrar la caché (date una vuelta también por el directorio ‘var’) o reindexar los índices de BBDD pero, oh!, no tenemos acceso a la aplicación.
Para esto existe el ‘shell’ de Magento.

Os voy a indicar aquí cómo limpiar la caché directamente desde consola (yo estoy utilizando directamente ‘terminal’ en Mac, el CMD en Windows bastaría, siempre y cuando tengamos en el PATH la referencia a las librerías PHP); este código se ejecuta desde el mismo directorio donde tengamos hecha la instalación de Magento:

Primero deshabilitamos la ruta por defecto, después limpiamos la caché y finalmente volvemos a ‘compilar’.

Lo mismo ocurre para reindexar (mirar USAGE en archivo ‘indexer.php’ del directorio ‘shell’).
Y voilá! Ya tenemos la caché limpia, y si todo ha salido bien podremos volver a loguearnos al panel de administración.

« Entradas Antiguas