Maquetar success.phtml en Magento 1.8.1.0

magento_logo

Maquetar la thankyou page puede ser un engorro importante si cada vez que tenemos que probar los cambios tenemos que hacer un pedido. Lo mejor es que impidamos el limpiado de la sesión para que cuando refresquemos nos siga mostrando la información del pedido.

Para hacer esto nos vamos al archivo:

/app/code/core/Mage/Checkout/controllers/OnepageController.php

y comentamos temporalmente la línea 291 donde pone:

la función es successAction por si en próximas versiones cambiara el número de línea.

Info extraída de: http://www.impulsis.com/nc/blog/blog-post/how-to-style-success-page-in-magento/comment/1/30.html

Class ‘Mage_Googlecheckout_Helper_Data’ not found

magento_logo

El otro día actualicé un Magento de la versión 1.8.0.0 a la 1.8.1.0. Al entrar al administrador me salía la típica ventana de Magento en blanco total que no te informa de absolutamente nada (White Screen Of Death), menos mal que a veces el fichero de errores de apache dice alguna cosa útil.

El problema estaba en la clase Mage_Googlecheckout_Helper_Data. Algo han hecho en la última versión ya que en la propia info de de lanzamiento ponen que hay que eliminar todos los archivos menos config.xml de la ruta

/magento-install-dir/app/code/core/Mage/GoogleCheckout/etc

Más info en:

http://www.magentocommerce.com/knowledge-base/entry/ce-18-later-release-notes#11810-changes-upgrade-issue
http://stackoverflow.com/questions/20569358/class-mage-googlecheckout-helper-data-not-found

Cantidad no se actualiza en carrito Magento 1.8.0.0

magento_logo

Estos fallos en versiones de Magento que ya tienen su solera me tocan las narices. Resulta que ahora a no ser que uses el archivo template/checkout/cart.phtml directamente de base no te incluye en el formulario una key con lo que no se actualizan las cantidades.

Si ponemos las rutas cargando el cart.phtml del base vemos que carga un bloque (frontend/base/default/template/core/formkey.phtml) con una variable input type=”hidden” llamada form_key. Este bloque no lo carga si usamos un cart.phtml propio en nuestro template.

La solución es poner en nuestro cart.phtml un input type=”hidden” como este:

act: También se puede utilizar esta otra línea que parece más limpia ya que carga el código bloque correspondiente según el layout core.xml

+info
http://www.magentocommerce.com/boards/viewthread/767323/

Listar productos destacados por fecha en Magento 1.8.0.0

magento_logo

Supongo que esto será igual para versiones anteriores, pero como digo en el título yo he hecho la prueba en la versión CE 1.8.0.0

Para sacar el listado de productos según un atributo personalizado fecha deberemos de hacer una serie de pasos:

  1. Creación de los atributos y asignación de estos a un conjunto.
  2. Creación de un fichero .phtml que cargaremos a través de una llamada desde la página CMS
  3. Llamada desde la página Home para cargar el phtml.

Ok, vamos a ello:

1. Como queremos realizar un listado de productos destacados por fecha, vamos a crear dos atributos de nombre featured_from_date y featured_to_date de tipo Fecha y los adjuntamos a los conjuntos de atributos que queramos (Default o los personalizados que tengamos).

2. Una vez hecho esto habrá que crear un fichero de nombre featured.phtml en /app/design/frontend/paquete/tema/template/catalog/product/ siendo paquete el nombre del paquete utilizado y tema el nombre del tema, con el siguiente contenido:

3. Una vez creado el fichero habrá que hacer la llamada desde la home con este código:

Ahora solo tienes que cambiar las fechas del atributo featured_from_date y featured_to_date de cualquier producto para asegurarnos de que se muestra en el bloque de la home. Ten en cuenta que este código solo muestra producto que son visibles, es decir, si el producto está deshabilitado no será mostrado por mucho que tengas el código correcto.

Paginación de usuarios en WordPress con wp_pagenavi y WP_User_Query

wordpress-logo

Para listar usuarios en WordPress basta con usar WP_User_Query como si fuera una WP_Query normal (con sus modificaciones claro). Lo que me ha costado a mi es encontrar como hacer la paginación de estos usuarios con wp_pagenavi. Este es un plugin de paginación avanzada que funciona genial.

Bueno, pues para hacer que todo funcione como toca hay que hacer la consulta controlando las variables de paginación así:

Y justo antes de cerrar el if poner el siguiente código, indicando la variable de consulta y el tipo.

Ya digo, algo muy sencillo pero que me ha costado encontrar como hacerlo.

+info: http://wordpress.stackexchange.com/questions/30977/list-users-by-last-name-in-wp-user-query ( Cuidado, no implementa bien la paginación )

http://wordpress.org/support/topic/plugin-wp-pagenavi-fatal-error-call-to-undefined-method-wp_user_queryget

Problema al crear proyecto nuevo en Netbeans 7.0.1 en Ubuntu

ubuntu-logo32

 

Si al intentar crear un proyecto nuevo, en la ventana de creación del proyecto se queda pensando y no te deja elegir que tipo de proyecto es, con lo que no puedes seguir al paso siguiente, seguramente sea porque tienes instalada una versión de openjdk que tiene algún bug.

La solución es desinstalar la librería openjdk e instalar la oficial de Oracle:

1. Desinstalación de openjdk. En mi caso tengo la 6 con lo que lo primero sería cambiar ese número por la que tengáis instalada. Para mirar qué número de versión tenéis:

Lo siguiente es desinstalar openjdk (cambiando el 6 por lo que sea):

Después de hacer esto si ejecutamos

Nos dirá algo así como bash: /usr/bin/java: No such file or directory

Con esto ya habremos desinstalado openjdk

2. Instalar Java 7 de Oracle:

Con esto en principio ya podréis crear proyectos sin problema.

+info:

http://kiranscience.blogspot.co.uk/2012/08/remove-openjdkjre-from-ubuntu-1204.html

http://www.webupd8.org/2012/01/install-oracle-java-jdk-7-in-ubuntu-via.html

Twitter Bootstrap responsive a 16 columnas

bootstrap

Para el próximo template responsive que voy a crear para Magento me pasaron un diseño en PSD basado en un grid de 16 columnas. Decidí usar el framework Bootstrap de Twitter, pero me di cuenta de que por defecto está basado en 12 columnas en lugar de 16.

En la página de Twitter Bootstrap, que actualmente está en la versión 2.3.0, hay una herramienta de configuración donde es posible bajar un Bootstrap custom diciéndole que es lo que quieres y que no. En la parte inferior están los parámetros del gridsystem donde puedes decirle al generador qué valores quieres tener para número columnas, ancho de cada una de ellas y separación. Estos serían los valores que habría que ponerle para un layout de 16 columnas.

bootstrap-grid

Pero cual es mi sorpresa cuando al descomprimir el archivo .zip que te genera, los archivos bootstrap.responsive.css y bootstrap.responsive.min.css brillan por su ausencia. ARRRGG!!

Después de darle muchas vueltas decido que la mejor opción es bajarme los ficheros less (disponibles en la carpeta less del proyecto Twitter Bootstrap en github) y compilar el fichero yo mismo.

Para usuarios de Mac puede ser relativamente fácil hacer esto ya que existen heramientas muy chulas (como Crunch por ejemplo) que van a las mil maravillas. Pero si trabajas con Windows o Ubuntu puede ser un poco más complicado.

Lo intenté con Simpless en Windows XP pero no me funcionó, ya que por lo visto han dejado un poco de lado el proyecto y al compilar los ficheros me daban errores (luego me enteré de que la librería Less.js la tienen desactualizada y la actualicé pero ni así). También lo intenté con WinLess pero la aplicación cascaba estrepitosamente al intentar abrir el directorio que contiene los archivos .less.

Así que me decidí por hacerlo por terminal en Ubuntu (no hay, o al menos no he encontrado, compiladores gráficos de Less para Ubuntu). Para usar Less en Ubuntu lo mejor es instalar Node.js y luego con Node Package Manager instalar Less. En esta guía David Sadler explica de lujo la instalación de Node.js en Ubuntu, aunque yo me salté el paso que hace el cambio de rama a la 0.6.17, más que nada porque en estos momentos están por la 0.9.9. Así que yo os recomiendo que os saltéis esta línea también

Una vez instalado Node.js hay que instalar less con NPM. La línea que hay que ejecutar en el terminal es la siguiente:

Vale, ahora ya tenemos las herramientas para compilar el archivo responsive.less, pero antes nos tocará cambiar los valores del archivo variables.less alrededor de la linea 272, por los que queremos para soportar responsive a 16 columnas:

Grabamos el archivo variables.less y a continuación compilamos el archivo responsive.less con la siguiente orden:

Con lo que ya tendremos el archivo bootstrap-responsive.css con soporte para 16 columnas que es lo que andábamos buscando. Os dejo a vosotros el tema de la minificación, que hay mil herramientas por ahí.

Act: Gracias a este twitt de @jorgecasar me doy cuenta de que falta una cosa más. En el archivo bootstrap-responsive.css generado, alrededor de la línea 1016 sigue estando .span12 al 100%. Por lo visto esa parte está sin parametrizar en el .less. Habría que cambiar ese código por este otro:

Act2: Me pide James Vergara en los comentarios el archivo bootstrap-responsive.css con soporte para 16 columnas. Aquí lo tenéis:

bootstrap-responsive.css con soporte para 16 columnas

+Info:
http://twitter.github.com/bootstrap
https://coderwall.com/p/vusddq
http://lesscss.org
http://toutpt.makina-corpus.org/en/articles/twitters-bootstrap-for-responsive-web-design-with-16-columns

Videos de Youtube muy lentos en OSX Lion

No se que pasa que últimamente los videos de Youtube me van super lentos, la descarga va fatal. Llevaba dos días así y una pequeña búsqueda me ha dado la solución. Abres el terminal (Aplicaciones/Utilidades/Terminal) y pones lo siguiente:

Por lo visto haciendo esto capamos el servidor por defecto de Youtube para que el visor de videos de vaya a buscar directamente a los datacenters de Google con lo que cargará más rápido.

A mi me ha funcionado.

+ info: http://productforums.google.com/d/msg/youtube/7jCNUBj4lt8/Mi3xBIkgEEUJ

++info: http://www.reddit.com/r/technology/comments/13kmvd/have_time_warner_internet_but_can_barely_stream/c753mfs

Quitar decimales en los precios de Magento 1.7.0.2

magento_logo

Puede ser que en tu proyecto tengas que quitar los decimales porque los precios de tus productos sean muy altos y no quieres tener el típico ,00 colgando de todos ellos.

Para hacer esto solo hay que copiar un archivo del core a local y modificar el número de decimales.

  1. Copiar el archivo app/code/core/Mage/Directory/Model/Currency.phpapp/code/local/Mage/Directory/Model para no eliminarlo en futuras actualizaciones
  2. Busca la función format y cambia la precisión de 2 a 0:

Con lo que te quedaría el código así:

Borrar pedidos de prueba y resetear contadores en Magento 1.7.0.0

magento_logo

Para empezar una tienda de cero y ponerla en producción nunca está de más borrar todos los pedidos que se han hecho de prueba y resetear los contadores para que el primer pedido y la primera factura empiecen con el número 1. Esto es importante si vas a utilizar el envío de facturas a clientes por ejemplo.

Antes de nada, hacer una copia de seguridad de la base de datos.

Mi versión de Magento, como ya digo en el título, es la 1.7.0.0

Creamos un archivo en el raiz de Magento (al mismo nivel que el archivo index.php y el directorio app) un archivo borrar_pedidos.php con este código de Dejan Radic de Inchoo que quita todos los pedidos, facturas, envíos, etc.

Una vez creado lo ejecutamos accediendo a él directamente (http://dominio.com/borrar_pedidos.php).

Que no se te olvide borrar este archivo una vez hayas terminado.

Una vez quitados los pedidos el señor Fooman nos muestra como resetear los números de pedidos, facturas y envíos.

With a tool like phpmyadmin look at your database. In the table eav_entity_type you will find all entity types listed. The one of interest to change where the order number starts is order sales/order. Remember the entity_type_id (in my install it is 11). Next go to the table eav_entity_store. Look up the entity_type_id. Now you can change the value of increment_prefix and increment_last_id. If you wanted to have your next orderId to be 15000 set increment_last_id to 14999

Lo que quiere decir es que tenemos que ir a la tabla eav_entity_type, miramos entonces cual es el registro cuya columna entity_model es sales/order y nos quedamos con el campo entity_type_id. Ese será el identificador de los pedidos. Haremos lo mismo con las facturas (sales/invoice) y con los envíos (sales/shipment). Una vez tenemos estos códigos nos vamos a la tabla eav_entity_store y comparamos el campo entity_type_id con los valores que acabamos de obtener. Solo falta cambiar en esta tabla los valores del campo increment_last_id y le pondremos el valor anterior al que queremos que tenga el primer pedido/factura/envio. Es decir, si queremos que sea 100000001 como viene por defecto en Magento, pondremos como valor de increment_last_id 100000000.

Por último, una cosa más que a mi me daba error es la siguiente: Una vez seguidos todos los pasos anteriores al realizar un pedido para ver que todo estaba correcto y entrar al administrador para ver dicho pedido me salía un error como que el pedido con ese identificador ya existía(). Yo uso un módulo llamado OneStepCheckout para juntar todo el proceso de compra en una misma página que crea una tabla de pedidos llamada mw_onestepcheckout. Esa tabla también tendrá que ser vaciada por completo (TRUNCATE) y ya no nos dará el problema al entrar en la zona de pedidos del administrador de Magento.

Espero ahorrarle tiempo a alguien (o a mi mismo en un futuro :D)