Listado de categorías en Prestashop 1.6

Esta semana hemos tenido la necesidad de crear una página en Prestashop (concretamente para Prestashop 1.6) con un listado de categorías, para mostrar todas las categorías de primer nivel.

Parece mentira, pero Prestashop no incluye por defecto una página con listado de categorías, así que hemos tenido que programar un módulo expresamente. El módulo lo hemos programado a partir de dos módulos gratuitos que hemos encontrado por internet:

“Creating new pages in Prestashop” creado por nemops
“Homepage Categories Module” creado por jhnstcks 

Ahora, para devolverle el favor a internet, vamos a regalaros el módulo en forma de descarga gratuita:

allcategories









Ya lo he instalado, ¿cómo puedo mostrar la lista de categorías?

Es fácil, el enlace será así: http://example.com/index.php?fc=module&module=allcategories&controller=allcategories

De acuerdo, ¿y cómo puedo crear un enlace amigable?

También es fácil, vas a “Preferencias” / “SEO+URLs” y creas una entrada seleccionando el módulo y controlador “allcategories”. En nuestro caso hemos creado la url “/coleccion”, de forma que la lista de categorías se mostrará en la URL http://example.com/coleccion :

allcategories

Si alguien tiene problemas, dudas o se le ocurre alguna forma de mejorarlo, que deje un comentario 😀

Compresión en una conexión JDBC

base de dades
Esta semana hemos tenido una situación un poco peculiar. Una aplicación Java que conecta con una base de datos iba lenta en ciertos momentos. No era un problema de CPU en el cliente ni en el servidor de base de datos, ni tampoco era un problema de disco ni de red, todo iba como siempre.

El problema

Algunos de los listados de información que Java obtenía de la base de datos vía JDBC eran grandes (del orden de MB) y la respuesta tardaba en llegar por falta de un mayor ancho de banda.

Nueva web onlinedjshop.com

Onlinedjshop.com, la tienda online de la discográfica Squad Music, acaba de abrir su web renovada.

Hemos instalado y adaptado un Prestashop para que sus clientes puedan comprar música a través de internet. El diseño es sencillo, minimalista y adaptable a dispositivos móviles.

onlinedjshop

Aspecto de la nueva web onlinedjshop.com

Error al subir archivos adjuntos a Prestashop 1.6

Esta semana un cliente tenía problemas al subir archivos a su Prestashop 1.6. Fallaba tanto al subir archivos adjuntos (attachments) a un producto, como al subir archivos para venta digital (en el caso de un producto virtual). El problema ha requerido cambiar un par de cosas.

El primer cambio ha sido en la propia configuración de Prestashop:

Administración de Prestashop

Primer cambio para poder subir archivos de mayor tamaño

Habrá que modificar:

  • Tamaño máximo de los archivos adjuntos
  • Tamaño máximo para un fichero descargable

Una vez hecho esto, nos seguía dando error, aunque esta vez el error era distinto:

El límite elegido es mayor que el límite maximo de carga del servidor, Por favor, aumentar los límites de su servidor.

Este error ya nos indica que esta vez es el hosting quién nos limita. Para comprobar el máximo actual, creamos un archivo PHP en el servidor con este contenido:
 
Al visitar ese nuevo archivo mediante nuestro explorador (http:///.php) podremos ver el tamaño máximo permitido actualmente por el servidor:

  • post_max_size
  • upload_max_filesize

Es evidente que ambos deberán ser mayores que el archivo que queremos subir al servidor. En nuestro caso estos parámetros estaban a 2 M (dos megas) y necesitábamos que fuesen de, al menos, 20 M.

¿Cómo modifico esos parámetros?

Habitualmente los proveedores de hosting permiten dos formas de modificar estos parámetros:

  • Opción A: modificar el archivo .htaccess del directorio raíz de nuestro servidor web.
    • Añadir lo siguiente con el tamaño en megas que se desee:
      • php_value upload_max_filesize 20M
      • php_value post_max_size 20M
    • Si al hacerlo recibimos errores HTTP 500 (Error interno del servidor) es que el proveedor de hosting no permite esta configuración. Borra esas líneas y prueba la Opción B.
  • Opción B: modificar (o crear) el archivo php.ini en el directorio raíz de nuestro servidor web.
    • Añadir (o modificar) estas líneas:
      • upload_max_filesize = 20M
      • post_max_size = 20M
    • Es posible igualmente que veamos errores o que la configuración no tenga efecto.

Si ninguna de las opciones te funciona, tendrás que hablar con tu proveedor de hosting para que ellos lo configuren, porqué seguramente no permiten los métodos que mostramos en este post.

Actualizar OwnCloud (de 5.0.8 a 7.0.2) en un servidor NAS

La semana pasada compré en Redcoon un NAS (Network-attached storage) de la marca Zyxel, concretamente el NSA320S.
Las razones fueron básicamente que tiene:

  • Servidor FTP
  • Servidor WEB
  • Dos bahías para discos SATA, que pueden funcionar en RAID 0, RAID 1 y JBOD
  • La típica conectividad de disco: SAMBA, NFS, etc.

Aunque es un equipo de características bajas (256mb de RAM, 1GHz de procesador…) funciona bastante decente. Otro tema es la seguridad, de la que intentaré hablar en otro post…

Una de las aplicaciones preinstalables que llevaba el Zyxel NSA320S era OwnCloud, que aún no sé si usaré, en su versión 5.0.8.

Nunca había probado OwnCloud, aunque me habían hablado de él y, al ver la versión 5.0.8 funcionando pensé que se veía “viejo”. Cuando fui a la web de OwnCloud vi que existían versiones más modernas y decidí que iba a intentar actualizarlo.

ATENCIÓN, según OwnCloud, para actualizar hay que seguir un orden concreto:

  • La versión 5.0.8 actual hay que actualizarla a la última 5: 5.0.17
  • Después hay que actualizar la 5 a la última 6: 6.0.4
  • Y finalmente la 6 a la última 7 disponible: 7.0.2

¿Qué implica esto? Que hay que repetir el proceso tres veces en mi caso (tu caso podría ser distinto).

No sabía si sería posible, ni hasta qué punto podría toquetear el servidor web del NAS, pero os cuento la aventura por si alguien se lo plantea. La parte positiva es que internamente este NAS (como muchos otros) ejecuta un Linux.

Preparando el terreno:

  1. Desde el gestor del NAS instalar lo básico (esto es el paquete PHP-MySQL-phpMyAdmin y el paquete OwnCloud 5.0.8).
  2. Habilitar la conexión telnet. Habrá que hacer varias cosas en disco (como hacer root, cambiar permisos de ficheros, etc.) para las cuales necesitaremos acceso telnet o similar. Si no sabes lo que es el acceso root, mejor infórmate antes.
  3. Entrar por telnet (yo entré con usuario admin) y conseguir ser root (orden SU).
  4. Ir al directorio del Apache donde se encuentran las aplicaciones preinstaladas, como OwnCloud, en mi caso /usr/local/apache/htdocs/adv,/pkg
  5. Backup de lo que se tenga actualmente. Sobretodo si ya usas OwnCloud y tienes tu configuración, archivos subidos, etc.
    1. Yo usé la orden tar -zcvf file.tar.gz /ownCloud
    2. Llévate después el backup a un sitio seguro
  6. Borrar todos los archivos de OwnCloud excepto la carpeta config/ y la de datos, generalmente data/, aunque en muchos casos la tendréis en otra localización del disco y por tanto no os deberéis preocupar por ella.
    1. Ya que estás aquí, echa una ojeada a cómo están los permisos de cada cosa, sobretodo los de config/, porqué después deberás configurarlos igual.
  7. Bajar la nueva vesión:
    1. Buscar la versión correspondiente (leer advertencia al principio del post) en la web de OwnCloud.
    2. Bajarlo, por ejemplo: wget https://download.owncloud.org/community/owncloud-5.0.17.tar.bz2
  8. Descomprimir el contenido (atención con las rutas, asegúrate de que descomprimes donde toca): tar -zxvf owncloud-5.0.17.tar.gz /
    1. Si hubiera machacado el directorio /config (lo importante es el archivo config.php), recupéralo del backup.
    2. Es posible que tengas que asignar los archivos al propietario adecuado (root en mi caso) mediante chown -R root:root /ownCloud
    3. También puede que haya que retocar los permisos, en mi caso chmod -R 755 /ownCloud, a excepción de config/ y apps/ que, si no recuerdo mal, requieren 775.
  9. Si ya lo tienes todo en el sitio, y has configurado bien los permisos y propietarios, recargas la página de OwnCloud y te informará de que se está actualizando la base de datos a la nueva versión.

Enhorabuena, lo has conseguido. Como has leído al principio, deberás repetir el proceso hasta tres veces, 5.0.8 >  5.0.17 > 6.0.4 > 7.0.2, pero es relativamente rápido.

¿Qué ocurre ahora?

Cuando terminé las actualizaciones, me encontré con el problema de que OwnCloud se había vuelto considerablemente más lento y que algunas páginas no tenían el aspecto esperado. En la consola del navagador podía ver el error, varios archivos css no se encuentran (el típico error 404 para: versions.css, stylesheet.css, style.css, colorbox.css, firstrunwizard.css, slideshow.css, lucene.css, etc.):

Error al actualizar OwnCloud, archivos CSS no encontrados.

Error al actualizar OwnCloud, archivos CSS no encontrados.

Lo curioso es que los archivos sí que estaban en disco, así que fui a ver cómo estaba configurado el .htaccess. Es raro que estos CSS, según el .htaccess, los tenga que procesar y servir un php:

RewriteRule ^apps/([^/]*)/(.*\.(css|php))$ index.php?app=$1&getfile=$2 [QSA,L]

RewriteRule ^apps/([^/]*)/(.*\.(css|php))$ index.php?app=$1&getfile=$2 [QSA,L]

Visto esto, lo que hice fue directamente evitar que los CSS los procesasee ese index.php, cambiando la lína por esta: RewriteRule ^apps/([^/]*)/(.*\.php)$ index.php?app=$1&getfile=$2 [QSA,L]

El resultado fue el que sigue:

Error al actualizar OwnCloud, jquery-1.10.0.min.map no encontrado

Error al actualizar OwnCloud, jquery-1.10.0.min.map no encontrado

Todo estaba correcto, a excepción del archivo jquery-1.10.0.min.map, que no se encontraba. Simplemente hubo que copiarlo a la ruta adecuada. Por cierto, lo encontré aquí:  http://cdnjs.cloudflare.com/ajax/libs/jquery/1.10.0/jquery.min.map

¡OwnCloud actualizado en nuestro NAS!

PD: no sería mala idea hacer un backup de la instalación del OwnCloud completa ahora que lo tenéis actualizado, por si hay que reinstalarlo en algún momento…

PD: a fecha de publicación de esta guía he actualizado también el phpMyAdmin que lleva el NAS, aunque no lo explicaré porqué el proceso es aún más sencillo que el de actualización de OwnCloud.

Web para made4parents.com

Hace poco hemos terminado un trabajo muy original, la web de esta joven empresa de Banyeres de Mariola: made4parents.com. Se trata de una web corporativa que al mismo tiempo hace de tienda online, con unas características muy interesantes, desde donde venden sus creaciones para coches de bebé de la marca Bugaboo©.

Captura de pantalla

Vista de la página de made4parents.com

La web permite configurar tu diseño de fundas para el carrito, tanto en piezas como en colores y texturas. Así, la empresa lo fabricará a tu gusto. Toda una revolución.

Detalles técnicos
Coding
  • La web cuenta con un diseñador de cochecitos de bebé muy fácil de usar.
  • Las imágenes generadas se guardan en una caché para agilizar la navegación.
  • El usuario puede compartir fácilmente su diseño a las redes sociales.
Web design
  • Se han seguido las pautas de diseño que ha impuesto made4parents.com.
  • La web cuenta con un diseño responsive, adaptable a móviles y tabletas.

No se puede borrar la carpeta de un usuario eliminado en Windows 8.1

Parece que a la gente de Microsoft se le ha pasado un detalle por alto en Windows 8.1.

Después de borrar un usuario, pidiéndole a Windows que eliminase los archivos del usuario, hemos visto que la carpeta de archivos del usuario eliminado continuaba en el disco duro. Al intentar borrarla ha empezado la aventura: Windows no permitía borrarla porqué, decía, no estaba vacía o no teníamos permisos suficientes. Hemos intentado borrarla desde una linea de comandos ejecutada como administrador y con un comando recursivo (rd /S /Q), sin éxito.

Después de eso hemos empezado a buscar métodos un poco más agresivos porqué hemos visto que había una carpeta “Libraries” dentro de la carpeta del usuario que no se podía borrar. Hemos intentado coger el control de la carpeta (takeown) y algunas estrategias más.

Finalmente, hemos dado con la SOLUCIÓN en un foro de suporte de Microsoft. El proceso “Windows Media Player Network Sharing Service” tenía bloqueada la carpeta y la solución ha sido tan sencilla como detener el proceso y borrar la carpeta.

Son cosas que pasan.

Gestor de rutas: La Sària servicios turísticos

Hace un par de semanas que hemos programado un gestor de rutas con mapa para La Sària servicios turísticos, que ahora han abierto al público. Al igual que hicimos en la web de la Asociación Serra Mariola, cuenta con un mapa de Google Maps donde los visitantes podrán echar un vistazo a las rutas que La Sària ofrece por todo el territorio valenciano.

Gestor de rutes amb integració de Google Maps i WordPress per a La Sària serveis turístics

Gestor de rutas con integración de Google Maps y WordPress para La Sària servicios turísticos

La nueva sección de la web de La Sària te permite consultar sus rutas turísticas, excursiones e itinerarios de forma fácil, sobre un listado o sobre el mapa. Además, la gestión es también muy sencilla, que era uno de los requisitos del cliente.

Detalles técnicos
Coding
  • La web cuenta con una guía de rutas sobre mapa en la que los usuarios pueden ver la oferta.
  • Además, los resultados que se muestran sobre el mapa se almacenan en una cache temporal para aumentar el rendimiento de la web, minorar el tiempo de respuesta y evitar la sobrecarga.
  • La edición de las rutas también es muy sencilla. De hecho este era uno de los requisitos del cliente.
Web design
  • El mapa y gestor de rutas se ha integrado en el diseño web que ya tenía La Sària.

Problema con el BOM

Cuando programamos aplicaciones web aparecen una serie de complicaciones que no tenemos habitualmente cuando programamos aplicaciones de escritorio. Una de ellas está relacionada con el BOM (Byte Order Mark). Seguro que muchos hemos tenido malas experiencias con WordPress por ejemplo, diciéndonos cosas como HTTP header have been already sent. El BOM son unos caracteres especiales que se pueden colocar al principio de un archivo para indicar si es Little o Big Endian. Actualmente, en UTF-8 por ejemplo, no es obligatorio ponerlo (de hecho se recomienda no hacerlo), pero algunos editores de texto lo ponen por defecto y de aquí vienen los problemas.

Esta entrada ha estado motivada por un extraño problema causado por el BOM, cosa que supe a posteriori.

Cuando el frontend de la aplicación enviaba una petición AJAX (desde jQuery), ésta llegaba correctamente al servidor. El servidor procesaba correctamente la petición y retornaba la respuesta JSON. A pesar de eso, del lado de jQuery la acción no seguía.

Primero pensé que la respuesta JSON estaría mal formada, así que la comprobé con un JSON checker, como es JSONLint. La respuesta JSON estaba bien formada.

Después pensé que habría algún error jQuery-Javascript cuando se ejecutaba la acción success, pero no era así. Simplemente la acción success no se ejecutaba nunca. Eso me hizo pensar de nuevo en que había algún error con la respuesta JSON. Pero, ¿cómo? si la había comprobado con un checker.

Resulta que la respuesta venía con un BOM al principio, cosa que hacía que jQuery no ejecutase la acción success, aunque la respuesta era un JSON bien formado. El problema ahora era… tengo un proyecto web con cerca de dos mil archivos PHP… ¿cómo puedo encontrar el archivo en el que se ha incluido el BOM?

Habitualmente he usado un editor que te indica si el archivo tiene BOM o no, y te permite quitarlo o cambiar la codificación, como es Notepad++, pero se habían editado demasiados archivos como para revisarlos a mano. Pensé en programar una pequeña aplicación o script para detectar archivos con BOM, pero alguien se había preocupado de hacerlo y publicarlo gratuitamente: File BOM Detector. Sencillo y efectivo. Problema resuelto.

Alerta: hosting barato

Alojamiento web

Soluciones de hosting

De un tiempo a esta parte las empresas que ofrecen alojamiento web (hosting) luchan por ofrecer el sevicio más barato posible, incluso se anuncian en televisión, y es evidente que la crisis actual hace pensar a la gente que necesariamente deben ahorrar en hosting.

Hemos notado que últimamente nos llegan cliente con una serie de problemas comunes relacionados con la materia. Muchos están hartos de su servicio de alojamiento, bien sea por problemas de rendimiento, porqué sus webs han sido atacadas o porqué están cansados de tener que llamar a un 902 cuando tienen un problema y tener que explicárselo a personas que, frecuentemente, no tienen el nivel suficiente. De hecho, algunos de los servicios más “modernos” y baratos ni siquiera permiten hablar con una persona, sino que te obligan a escribir un ticket para gestionar tus dudas o problemas técnicos…

Nosotros, como muchos de ellos, ya hace tiempo que sufrimos el mismo proceso y aprendimos que barato no es sinónimo de bueno y que, si tu negocio depende de ello, más vale que haya una persona responsable y preparada con quién poder hablar.  Así, nosotros ofrecemos también alojamiento web, pero con algunas características distintas al mainstream:

  • Somos humanos, nos llamas y te respondemos
  • Damos soluciones a necesidades de hosting especiales, computación en la nube (Cloud Computing), servidores privados virtuales (VPS), grandes sistemas y, si lo necesitas, completamente administrados
  • Nosotros nos encargamos de las copias de seguridad y de todos los temas técnicos, para que tú te puedas centrar en tu negocio
  • Si necesitas hacer algún cambio, si tienes una duda o si alguna cosa no funciona… una persona te atenderá
  • Además, te podemos orientar para que cumplas sin problemas con la LOPD y la LSSI, y nuestros servidores están en España

Como siempre decimos, nuestro hosting es caro pero bueno, porqué pensamos que el precio no lo es todo.