Mostrando entradas con la etiqueta Utilidades. Mostrar todas las entradas
Mostrando entradas con la etiqueta Utilidades. Mostrar todas las entradas

martes, 28 de enero de 2014

Tutorial .htacess para Prestashop



Sé que existen miles de tutoriales sobre htaccess, en todos los idiomas y con un millón de ejemplos. A veces he tenido que leer 10 o 15 tutoriales para encontrar la forma de solucionar el problema y la verdad es que uno se desespera, esa abrumadora cantidad de información es la que me ha empujado a realizar este tutorial centrado a solucionar los problemas que pueden surgir en Prestashop.

Sin duda una parte fundamental para cuidar y mejorar nuestra tienda online es dominar un poco el .htaccess, ese archivo que nos encontramos en la raíz de nuestra web, que puede parecer poca cosa, pero en realidad es como el sheriff y lleva la voz de mando en el tema de accesos de nuestra web.

El .htaccess puede hacer muchas cosas como bloquear robots maliciosos que se saltan el robots.txt, filtrar IP’s, activar la compresión de archivos del servidor, controlar el acceso a carpetas, y un montón de cosas más, pero en este tutorial nos vamos a centrar en la función de redireccionamiento o rewriterules, que es la función más utilizada y la que nos ayudará a solucionar rápidamente todos los errores 404, eliminar páginas antiguas o redireccionar esas páginas antiguas a una página actualizada.

Puede parecer un poco duro al principio pero si le pilláis el tranquillo, incluso le cogeréis cariño al htaccess y veréis cómo podréis solucionar muchas cosas, entre ellos todos los errores que aparecen en vuestro webmastertools o migraciones de urls.

Pondré un ejemplo básico y luego explicaremos el código paso a paso.

Redirección Sencilla

El siguiente ejemplo hace que la página antigua y eliminada www.mitienda.com/pagina-ant-1.html se redireccione a la página principal.

<IfModule mod_rewrite.c>

            RewriteEngine on
            RewriteCond %{HTTP_HOST} ^www.mitienda.com$            
            RewriteRule ^pagina-ant-1$ http://www.mitienda.com/ [R=301,L]

</IfModule>

Repasemos ahora el código.

<IfModule mod_rewrite.c>
Lo primero que hacemos es abrir un condicional. Comprueba si existe el módulo mod_rewite.c en el servidor y si es así comprobará el código anidado.

RewriteEngine on
Activa esta función en el servidor

RewriteCond %{HTTP_HOST} ^www.mitienda.com$
Condición a cumplirse. Si la variable del servidor %{HTTP_HOST} es igual a www.mitienda.com comprobaremos la Rewrite Rule.

NOTA:
^ - Indica el principio de la palabra a buscar
$ - Indica el final de la palabra a buscar

RewriteRule ^pagina-ant-1$ http://www.mitienda.com/ [R=301,L]
Cuando la url sea http://www.mitienda.com/pagina-ant-1 redirecciona a la página http://www.mitienda.com/

Al final del código hay unos Flags [R=301,L] esto indica a la norma de reescritura las siguientes opciones.

R=301 – R= Redirección 301 permanente. Existen varios tipos de redirecciones, pero salvo alguna excepción utilizaremos siempre la 301.
L – Al cumplirse esta norma, para el código y no ejecuta ninguna condición más.

</IfModule>
Cierra el condicional principal. Siempre que queramos añadir una nueva redirección asegurarse de colocar el código antes del cierre del IfModule.

Comodines y Variables

Adentrándonos un poco más en htaccess vamos a conocer los comodines y variables utilizadas en redirecciones, son tremendamente útiles y nos ayudarán a solucionar muchos problemas de forma sencilla.

Repasemos primero los valores más utilizados.

. – Cualquier carácter a excepción del espacio.
* El carácter anterior puede repetirse 0 o más veces.
 () – Agrupa el contenido y lo guarda en una variable $1 para que podamos utilizarla en caso de ser necesaria en la dirección de destino.
| – Se utiliza dentro de los () para separar opciones de cadenas de url, viene a ser un “OR” Ej. (pag-x|pag-y) será verdadero si la url contiene la cadena pag-x o pag-y.
\ – Código de escape, utilizaremos la barra invertida para poder utilizar el punto como texto de la cadena pag-z\.html

Como ejercicio miraremos de redireccionar la url 1 a la url 2.

1.- http://www.mitienda.com/categoria-antigua/3487-producto.html
2.- http://www.mitienda.com/categoria-nueva/3487-producto.html

<IfModule mod_rewrite.c>

            RewriteEngine on
            RewriteCond %{HTTP_HOST} ^www.mitienda.com$            
            RewriteRule ^categoria-antigua/(.*)$ http://www.mitienda.com/categoria-nueva/$1 [R=301,L]

</IfModule>

Teniendo en cuenta el ejemplo anterior únicamente explicaremos los nuevos elementos.
Lo significativo de este código es el ^categoria-antigua/(.*)$ esto indica que si la url solicitada contiene categoría-antigua/(y lo que sea) lo enviará a categoría-nueva/(y lo que sea).

Supongo que el concepto ha quedado claro ¿no?

Otro ejemplo.

Tengo varias categorías antiguas y he terminado agrupándolas en una

<IfModule mod_rewrite.c>

            RewriteEngine on
            RewriteCond %{HTTP_HOST} ^www.mitienda.com$            
            RewriteRule ^(categoria-antigua-1|categoria-antigua-2|categoria-antigua-3)/(.*)$ http://www.mitienda.com/categoria-nueva/$2 [R=301,L]

</IfModule>

En este ejemplo hemos creado un grupo que redirecciona cualquier url que contenga esa categoría antigua y en el segundo grupo anida cualquier contenido.

Fijaros que ahora en la url de salida ya no pone $1 que sería el contenido del primer grupo de () dando un resultado erróneo como: http://www.mitienda.com/categoria-nueva/categoria-antigua-x

Utilizando $2 devolverá el contenido del segundo grupo de (.*) que ya sabemos que será un lo que sea.

URL’s Con consultas

De forma menos habitual podemos encontrarnos errores de urls con consultas, que serán todas las direcciones que Prestashop por ahora no las convierte en amigables como al paginar en el listado de productos. Para explicarme mejor pondré un Ejemplo.

Imaginemos un error en Webmastertools de Google que indica la siguiente url, nuestra misión es redireccionarla a la homme.

http://www.mitienda.com/mi-categoria?p=2

Estas no se pueden solucionar como lo hemos hecho antes, y lo que tenemos que hacer es añadir un nuevo RewriteCond que contemple la variable del servidor QUERY_STRING

El carácter “?” es un carácter reservado con lo que la opción rápida de poner la url entera en el rewrite rule es viable, además de que una url con consulta no es una url clásica ya que la cadena de la consulta se almacena en la variable del servidor %{QUERY_STRING}.


<IfModule mod_rewrite.c>

RewriteCond %{HTTP_HOST} ^www.garamo.com$
RewriteCond %{QUERY_STRING} ^p =(2|3|4)$
RewriteRule ^(categoria-antigua-1|categoria-antigua-2)$ http://www.mitienda.com? [R=301,L]

</IfModule>

Que hay que tener en cuenta en el ejemplo.

Recordemos la url de ejemplo: http://www.mitienda.com/mi-categoria?p=2

RewriteCond %{QUERY_STRING} ^p =(2|3|4)$
De igual forma que con la variable del host, La variable QUERY_STRING guarda el contenido de cualquier consulta en url, lo que va después del ?. Comprobamos que la consulta contenga “p=2”, o “p=3”, o “p=4”

RewriteRule ^(categoria-antigua-1|categoria-antigua-2)$ http://www.mitienda.com? [R=301,L]
En esta sección del código vemos filtramos que la condición de reescritura se realizará si la url contiene “categoría-antigua-1” o “categoría-antigua-2”.

Si en la url tenemos alguna de estas 2 categorías y además incorpora la consulta del RewriteCond entonces realizará la redirección a http://www.mitienda.com

NOTA: Finalizar la URL con el símbolo “?” evita que la consulta original se sume a la url final.

Creo que hasta aquí podemos entender lo básico para crear cualquier redirección de nuestra web.

En un próximo post pondremos ejemplos concretos y útiles de redireccionamiento con Prestashop.

Si tenéis alguna duda o una redirección que necesitáis y no os sale, comentarlo en el post y le daremos solución.

martes, 1 de octubre de 2013

Overrides en Prestashop



En el post de Rich Snippets tuvimos que hacer un Override a la clase Tools.php y no expliqué en detalle en que consiste y por qué es conveniente saber hacer un Override a la hora de hacer cambios en Prestashop.

Un Override es la fórmula que nos ofrece Prestashop para sobrescribir funciones y archivos sin tener que modificar los originales, la idea es que copiamos o creamos un archivo con el mismo nombre en la carpeta indicada para su propósito y Prestashop detectará dicho archivo y lo cargará obviando las funciones originales.

Existen distintos tipos de overrides que nos pueden ayudar a flexibilizar las personalizaciones y librarnos de quebraderos de cabeza frente a nuevas actualizaciones.

Desconozco desde que versión se empezaron a utilizar los overrides, pero al menos desde la versión 1.4.2 que es con la que descubrí Prestashop ya estaban disponibles.

Los tipos de Override que podemos hacer son de Core o de Módulo

Override de Core

Podemos modificar las Clases y Controladores, que principalmente son las funciones centrales de Prestashop.

Los Overrides se realizan desde la carpeta mitienda.com/override/(classes o controllers según necesitemos)

Partiendo de la carpeta Override, hay que respetar tanto la estructura interna de cada carpeta así como los nombres de archivo originales que queramos modificar.

Ej práctico.

Para realizar un Override a la Classe original Tools.php que está en “mitienda.com/classes/”, crearemos un archivo llamado Tools.php en la carpeta “mitienda.com/override/classes/”

Dicho archivo empezará con un código concreto para dar cuenta a Prestashop de que ese archivo contiene funciones que sustituyen las originales o tendrá nuevas funciones que amplían las capacidades de Prestashop.


Class Tools (Es el nombre de nuestra nueva clase) extends ToolsCore (Es la clase a la que apunta nuestra nueva clase)
Si luego creamos funciones con el mismo nombre que las que contiene ToolsCore las de ToolsCore se desactivarán y ejecutará las nuestras, si la función no existe será una nueva funcionalidad que podremos utilizar)

Ahora podemos copiar funciones originales de Tools.php y modificarlas a nuestro antojo, o crear nuevas funciones que utilizaremos sin miedo de perder las funcionalidades después de una actualización.
Del Override del Core únicamente veo una pequeña pega, es que por ahora no podemos realizar Overrides a los java script del core, así que habrá que modificar los originales si es necesario, lo mejor es hacer una copia antes de hacer nada.

Override de Módulo

Podemos modificar el aspecto de un módulo para adecualro a nuestro tema y necesidades, además realizar un Override de módulo es muy sencillo. Tan solo hemos de copiar el archivo original en la ruta que corresponda y modificarlo a nuestro antojo.

Las rutas a usar son las siguientes.


Plantillas (tpl)

mitienda.com/themes/mi-tema/modules/nombre-modulo/nombre-archivo.tpl

JavaScript (js)

mitienda.com/themes/mi-tema/js/modules/nombre-modulo/

Css (css)

mitienda.com/themes/mi-tema/css/modules/nombre-modulo/


Hasta aquí dejo la explicación de los Overrides, si tenéis cualquier duda comentar y haré lo que esté en mí mano.

jueves, 5 de septiembre de 2013

Pasa tu tienda Prestashop a tu ordenador

Muchas veces nos gustaría tener nuestra tienda en nuestro ordenador para poder hacer pruebas, cambiar el diseño o trastear en el código para lo que se nos ocurra.

Pasar la tienda a nuestro ordenador es bastante sencillo si seguimos los siguientes pasos.

Antes que nada es necesario tener todas las herramientas para poder ejecutar prestashop en local.

Una vez lo tengas todo instalado y configurado nos ponemos manos a la obra.

Lo primero que haremos será exportar y descargar la base de datos en un archivo, hay mil formas para hacerlo, pero la forma más rápida es entrar en el phpmyadmin de tu hosting y exportar el archivo en formato SQL.

Si tu archivo ocupa más de 50 megas, para agilizar la exportación e importación de la base de datos yo suelo cargarme las estadísticas de visitas, ya que facilmente doblan el contenido de la base de datos y puede dar bastantes problemas y esperas monumentales a la hora de importar la base de datos en local.

Si queréis o nesitáis las estadísticas la recomendación es hacer la exportación en dos pasos, una de toda la base de datos excepto las tablas que aparacen abajo y otra exportación con las 4 tablas que comentamos a continuación.

Para vaciar las tablas lo podemos hacer desde HeidiSQL (Shift + Del), Navicat (Vaciar tabla) o desde el phpyadmin a través de la siguiente consulta.

truncate 'PS_guest';
truncate 'PS_connections';
truncate 'PS_connections_page';

truncate 'PS_connections_source';

Con esto ya tendremos estas tablas vacías y la base de datos seguramente pesará la mitad de la mitad.

Una vez tengas el SQL en tu disco duro, pasamos a preparar el terreno para descargar toda la tienda en el ordenador.

Ahora tenemos que ir a la carpeta htdocs de Xampp que por defecto está en la siguiente ruta "C:\xampp\htdocs" y crearemos una carpeta para la tienda, por ejemplo, "mitienda" o el nombre que queramos.

Una vez tengamos la nueva carpeta abrimos FileZilla y nos conectamos a nuestra FTP con la configuración que nos dé nuestro proveedor de hosting.

Dependiendo de como sea el usuario y el hosting podemos encontrarnos una carpeta llamada "www" ahí tenemos toda la tienda y demás aplicaciones que podamos tener por ejemplo un blog, si por casualidad entras directamente en la carpeta de prestashop te encontrarás con las siguientes carpetas, (cache, classes, config, controlers, etc...) si es así estás en el lugar correcto, tan solo selecciona todos los archivos y carpetas y arrástralo a tu carpeta "mitienda"

Mientras se está descargando todo en la carpeta "mitienda" ejecutaremos Xampp y activaremos los servicios de Apache y Mysql. Si tienes algún problema para ejecutar los servicios seguramente es que tiene algún que otro programa que ya utiliza los puertos necesarios, como Skype o IIS. Si es así, buscar por google que hay mucha ayuda.

Ir a phpmyadmin

Ahora iremos a phpmyadmin, para volcar la base de datos en nuestro disco duro, tan sencillo como pulsar el botón Admin del módulo de MySQL.

Crear Base de Datos


En Phpmyadmin crearemos una nueva base de datos, para evitar más configuraciones aconsejo llamarla con el mismo nombre que la base de datos que tenemos en el hosting de prestashop. Le damos al botón Crear y cuando termine aparecerá el nombre de la base de datos en el frame de la izquierda, hacemos click en el nombre para acceder.

Importar la base de datos de Prestashop


Con la base de datos vacía, pulsamos a Importar. Aparecerá una nueva pantalla en la que simplemente hemos de seleccionar el SQL que hemos descargado en la exportación de la base de datos original y pulsamos a Continuar, esperamos unos minutillos y ya tenemos la base de datos en nuestro ordenador, si por casualidad tienes las estadísticas en otro archivo, vuelves a importar y seleccionas el archivo de las estadísticas y listo. Cuando termine todo podemos cerrar la ventana.

El siguiente paso es ir a la carpeta "mitienda\config" y abrír el archivo "settings.inc.php"


Para hacer que prestashop conecte con la base de datos local, hay que cambiar 2 valores.

1 _DB_USER_: Hay que colocar el usuario administrador de MySQL de Xampp, por defecto es "root".

2_DB_PASSWD_: La contraseña de root de MySQL de Xampp.

Ahora ya podemos entrar en el backoffice de prestashop. Tan sencillo como abrir el navegador y teclear "http://localhost/mitienda/backoffice/"

Nota: tener en cuenta que el directorio del backoffice puede ser diferente en cada tienda, fíjate el nombre de carpeta de tu acceso al panel de control.



Accedemos como si lo hiciéramos desde la web.

Entraremos en el panel de toda la vida y veremos el siguiente mensaje en la parte de arriba


Hacemos clic para modificar el nombre de la tienda, y nos llevará directamente a la siguiente pantalla, 


Cambiaremos donde pone "miweb.com" por "localhost" y en base URI hemos de añadir el directorio de /mitienda/


Ahora podemos acceder a la tienda.



Veremos que las imágenes no se cargan, no hay que asustarse, porque lo solucionamos en un momento.



Tan solo hay que eliminar el archivo .htaccess de la carpeta "miweb" y volver al backoffice.




Una vez dentro nos vamos a "Preferencias > SEO y URL"


No hace falta realizar ningún cambio, y simplemente pulsamos a Guardar. Esto generará un nuevo ".htaccess" y cargará las imágenes.

Una vez llegado a este punto podemos decir que ya tenemos la tienda instalada en nuestro ordenador.

miércoles, 4 de septiembre de 2013

Herramientas imprescidibles para modificar tu prestashop

Para modificar Prestashop por nuestra cuenta creo que hay algunas herramientas que nos pueden facilitar bastante la vida, así que voy a enumerarlas.

Xampp

Esta es la herramienta principal, un emulador de hosting, ideal para instalar o volcar el Prestashop en tu propio ordenador para ejecutarlo en local, de esta forma podemos trastear prestashop en nuestro ordenador sin el miedo de cargarnos la tienda que podamos tener en producción, si los cambios que hagamos funcionan en local, entonces podremos subir los archivos modificados con la seguridad de que funcionará todo correctamente. La encontraremos gratuitamente aquí.




Notepad++

Es un editor de códigos práctico, potente y gratuito bajo licencia GPL, que nos ayudará enormemente en la edición del código gracias a la visualización de estilos de lenguajes, lo podéis descargar aquí


Editor Notepad++















Navicat

Este programa nos permitirá acceder a la base de datos desde un interface bastante claro y sencillo, podremos editar, visualizarla, exportar e importar la base de datos entre muchas otras cosas, para mi el punto más fuerte es la exportación a excel, dependiendo de lo que necesitemos podemos hacer un tratamiento a la información bastante completa gracias a las funciones y fórmulas de excel. al menos a mí me ha salvado de un buen par de faenones. Este programa es de pago, unos 99$ pero si puedes vale la pena, échale un ojo a su web.


 
Para los que no podáis gastaros 99$ y no queráis ser malos ;) tenéis la opción de HeidiSQL, un software gratuito que viene hacer lo mismo, la exportación que podemos hacer es a CSV pero personalmente no he probado la exportación e importación, este lo podemos descargar aquí.


FileZilla

Por último necesitaremos un gestor de FTP, con FileZilla podremos subir y bajar archivos a nuestra web de la forma más rápida y gratuita. Descargar aquí






Con estas herramientas podremos empezar a meterle mano a prestashop y a cualquier CMS que se nos ponga por delante.