viernes, 24 de agosto de 2012

Reiniciar secuencia en MySql

En innumerables ocasiones nos encontramos que los sistemas que utilizamos tiran de tablas donde el id es un secuencia. Con normalidad los secuenciales son utilizados como id de una tabla de tal manera que al ir insertando datos va incrementándose el id. Al listar los datos de una tabla, estos id´s no tienen por que ser consecutivos porque al borrar una fila esa tupla desaparece pero el secuencial no mete ese valor del id otra vez en la secuencia y si insertamos un nuevo registro continuará con la numeración que tiene el secuencial. Supongamos que tengo esta tabla:

id  nombre
1   Pepe
2   Pepo
3   Pepi

Si elimino el registro con id 2 el secuencial tendría como siguiente id el 4 y si inserto un nuevo dato tendríamos que los id´s que tenemos son 1,3 y 4:

id  nombre

1   Pepe
3   Pepi
4   Pipo

En el caso de que esto pase en una tabla en la cual el id es vital para el negocio (por ejemplo una tabla que contenga facturas y que el número de factura sea el del id) tendremos, cada vez que eliminemos alguna, que indicarle a la secuencia que el siguiente valor es otro número distinto al que tiene para que continúe desde el que le indiquemos la secuencia.

Para reiniciar una secuencia y que empiece desde el número que nosotros queramos, tenemos que lanzar:

ALTER TABLE <tabla> AUTO_INCREMENT= 1
 
Donde el valor 1 del AUTO_INCREMENT es el valor que va a utilizar para la siguiente inserción 
y la tabla es la tabla sobre la que queremos inicializar la secuencia.
 
 

miércoles, 8 de agosto de 2012

Migrar tienda con Prestashop

Backup de la tienda Origen

 Antes de migrar nuestra tienda a otra ubicación tenemos que hacer un backup de la base de datos y un tareo del directorio donde tenemos instalada nuestra tienda.
Para realizar el backup de una base de datos MySql yo prefiero realizarlo mediante el comando mysqldump frente a otros softwares como PhpMyAdmin, que aunque es una herramienta que simplifica la administración y el mantenimiento de una base de datos MySql, para este tipo de cosas la veo un poco limitada en cuanto a rendimiento y se hace muy cuesta arriba a la hora de generar ficheros de backup con un tamaño de unos 25 Mb y de restaurarlos. El uso estándar del comando  mysqldump es:  

          mysqldump  -R --user (usuario) -p (Base de Datos) > (nombre).sql 

Esto nos generará un fichero .sql con todas las sentencias para que al lanzarlo nos construya una base de datos idéntica a la que teníamos. Como nota adicional siempre le pongo el -R para que realice también el backup de los procedimientos almacenados y funciones. Otros ejemplos de uso del comando mysqldump son:
  • Backup de todas las bases de datos 
    • mysqldump --user (usuario) -p --all-databases > (nombre).sql
  • Backup de la estructura
    • mysqldump --user (usuario) -p --no-data  (Base de Datos)) > (nombre).sql
  • Backup los datos exclusivamente
    • mysqldump --complete-insert --no-create-info --user (usuario) -p (Base de Datos) > (nombre).sql
  • Backup con la contraseña en la sentencia(la password va pegada al -p)
    • mysqldump --user (usuario) -pPASS --all-databases > (nombre).sql
Después lo que hay que realizar es un tareo del directorio donde tenemos Prestashop. Para ello utilizamos el comando tar de la siguiente manera: 

      tar -cvf (nombre del tar).tar (directorio de prestashop)

Con esta sentencia tendríamos tareado todo el contenido de el directorio donde está prestashop en el fichero .tar. Una opción interesante del comando tar es -j pues comprime con bunZip2 el contenido del fichero, con lo que si tenemos que mover el tar entre servidores el tiempo es menor y el consumo de trafico también sería menor.


Restaurar en el destino


Lo primero que vamos a realizar es la descompresión del .tar en el directorio que hallamos elegido para albergar la tienda. Para esto copiamos el archivo .tar en el directorio y ejecutamos el comando: 

      tar -xvf archivo.tar
 

Tras tener el directorio explotado, verificamos que los propietarios tanto de archivos como de carpetas son los correctos para esta nueva ubicación (si no los podéis cambiar con el comando chown.
Después de esto abrimos el fichero /nueva_ubicacion/config/settings.inc.php y editar las líneas correspondientes a la definición de las variables __PS_BASE_URI_, _DB_NAME_, _DB_SERVER_, _DB_USER_ y _DB_PASSWORD_ para que se ajusten a la nueva ubicación y a la nueva base de datos.
  • define(‘__PS_BASE_URI__’, ‘/directorio/‘); Directorio donde hemos descomprimido el tar, si es en el raíz de tu carpeta publica poner “/
  • define(‘_DB_NAME_’, ‘base de datos nueva‘); Poner el nuevo nombre de la base de datos
  • define(‘_DB_USER_’, ‘usuario de la base de datos‘); Poner el nuevo usuario de la base de datos
  • define(‘_DB_PASSWD_’, ‘pass‘); Contraseña del usuario de la base de datos
Ahora restauramos la base de datos con el siguiente comando 

      mysql -u (usuario) -p --database=(nombre bd) < (archivo de backup).sql

Tras restaurar la base de datos necesitaremos ajustar los parámetros PS_SHOP_DOMAIN_SSL y PS_SHOP_DOMAIN de la tabla ps_configuration y asignarles el valor dominio.es/directorio o si la tenemos en el raíz del dominio dominio.es, sin más.
En caso de estar trabajando con el usuario root de la base de datos podemos otorgarle permisos administrador a otro usuario de la siguiente manera:
      
      #GRANT ALL PRIVILEGES ON (nombre de la base de datos).* TO 'usuario@localhost' IDENTIFIED BY 'password';

Si en vez de (nombre de la base de datos)  pusiésemos *.* se replicarían estos privilegios a todas las bases de datos.
Con esto ya tendríamos nuestra tienda prestashop migrada a otra ubicación. Está probado para la versión 1.4.8. 

martes, 7 de agosto de 2012

Utilizar WhatsApp desde PC

Si deseamos utilizar WhatsApp desde un PC lo primero que tenemos que tener es un número de móvil disponible para posteriormente registrarnos. Si bien no poseemos de un número de móvil, o no queremos registrarnos con el nuestro personal, podemos obtener un número móvil virtual.

Para utilizar WhatsApp  en el PC lo primero que hay que hacer es descargarse YouWave . YouWave sirve para correr aplicaciones Android en el pc de manera rápida y sencilla. La apariencia es muy parecida a la que se consigue instalando el Android SDK pero la configuración "fina" del Android SDK en cuanto a las redes y al rendimiento es tediosa, solo tendría sentido instalar este último si además queremos desarrollar aplicaciones para Android (las aplicaciones en YouWave corren mejor consumiendo menos recursos que montando un AVD en Android SDK).



Después nos la bajamos el archivo WhatsApp.apk desde la página de WhatsApp  y lo guardamos en C:\Users\<usuario>\youwave\android apps (si en la instalación le indicasteis otra ruta en vez de la de por defecto le ponéis la que le indicasteis al YouWave).
 






Entonces, tras arrancar YouWave le damos a View>Apps para que recargue las aplicaciones (si veis que con esto no os las recarga, y con Redraw Icon tampoco os aparece el icono de WhatsApp reiniciar YouWave). Lo ultimo que falta es hacer doble click en el icono de Whatsapp para que nos lo instale y completar la configuración (que no es más que aceptar las condiciones e introducir el número de teléfono).



Telefonía Móvil Virtual

En los tiempos que corren es habitual hablar de operadoras de telefonía móvil virtual. Estas realizan toda su operativa a través de Internet o por teléfono, sin tiendas físicas ni intermediarios. Pero lo que no es habitual todavía es hablar de telefonía móvil sin tarjeta SIM o telefonía móvil virtual. Yo voy a hablaros de fonYou una operadora virtual con telefonía móvil virtual que está funcionando a las mil maravillas.

Por motivos de trabajo y privacidad tengo la necesidad de tener 2 números de teléfono contratados, el mio personal y el profesional, pero no quería adquirir un teléfono dualSim por el desembolso de dinero y que no tienen las mismas prestaciones que mi Iphone (siento ser un adicto de esta tecnología ). La idea de ir cargado con 2 móviles todo el día no me satisfacía, así que contraté un número con fonYou.
FonYou me permite tener 2 números de teléfono en mi móvil totalmente operativos y diferenciados el uno del otro, sin ningún tipo de coste adicional ni vinculación.

El funcionamiento es similar al de cualquier teléfono en red inteligente, se vincula el número a otro/otros números tanto de telefonía móvil o fija (permite hasta un máximo de 3 vinculaciones simultáneas) y desde fonYou se encargan de derivar tanto llamadas como sms a los terminales vinculados, siendo la llamada transparente tanto para el emisor como para el receptor. En el caso de querer hacer llamadas desde nuestro móvil virtual (y que al receptor le aparezca el número del móvil virtual), solo tenemos que realizar una llamada desde cualquiera de los números vinculado, validar la llamada con el código de seguridad y decir el número a donde queremos llamar.

Decir que entre otros servicios tiene un buzón de voz configurable, nos permite recibir los mensajes del buzón por correo electrónico con el archivo de sonido adjunto...etc En definitiva los servicios que nos presta la telefonía en red inteligente.

Los costes por el servicio son de 0 euros, lo único es que si emitimos llamadas nos costará lo mismo que una llamada de móvil a móvil, por el tramo de llamar desde nuestro numero al móvil al número móvil de fonYou.



Para finalizar decir que el número contratado será propiedad de fonYou a menos que lo compremos (cuesta unos 10 euros transcurridos 10 meses) en cuyo caso se nos proporcionará el ICC para que en caso de quererlo podamos migrar nuestro número a otra operadora.





domingo, 5 de agosto de 2012

Modificar navegabilidad de categorias en Prestashop

En una tienda con Prestashop no queríamos que las categorías intermedias fuesen "navegables", entendiendo por navegables que se pudiese clickar sobre ellas y nos mostrase en pantalla las subcategorías que de ella cuelgan. A continuación paso a ejemplificar esto para que quede claro el concepto de lo que queríamos.
Si partimos de este esquema de categorías:
  • Ropa
    • Hombre 
      • Pantalones
        • Vaqueros 
          • Vaquero 1
          • Vaquero 2
Donde Ropa, Hombre, Pantalones y Baqueros son categorías y  baquero 1, baquero 2 son artículos. Nosotros lo que queríamos era que las categorías intermedias (sin artículos ) como Ropa, Hombre, Pantalones no se pudiesen clickar para que no te listara las subcategorías que tenía. De esta manera solo queríamos que se pudiesen clickar las que tenían artículos.
Para ello tenemos que modificar el archivo que se encuentra en el directorio  modules/blockcategories/
category-tree-branch.tpl entendiendo que partimos del directorio donde tenemos instalado Prestashop.
Este fichero contiene el siguiente código:

<li {if isset($last) && $last == 'true'}class="last"{/if}>
        <a href="{$node.link}" {if isset($currentCategoryId) && ($node.id == $currentCategoryId)}class="selected"{/if} title="{$node.desc|escape:html:'UTF-8'}">{$node.name|escape:html:'UTF-8'}</a>
        {if $node.children|@count > 0}
                <ul>
                {foreach from=$node.children item=child name=categoryTreeBranch}
                        {if isset($smarty.foreach.categoryTreeBranch) && $smarty.foreach.categoryTreeBranch.last}
                                {include file="$branche_tpl_path" node=$child last='true'}
                        {else}
                                {include file="$branche_tpl_path" node=$child last='false'}
                        {/if}
                {/foreach}
                </ul>
        {/if}
</li>

Lo que nosotros teníamos que hacer era modificar el código para que si el nodo tiene hijos nos pintase solo el nombre y además ponerle el p con clase "dynamize" (el jQuery de la pagina entonces pone el símbolo de + al lado del nombre) y sino, entonces es que es un nodo final y ponemos el enlace.

El código quedaría de esta manera:
  
{if $node.children|@count > 0} 
   <p class="dynamize">{$node.name|escape:html:'UTF-8'}</p>       
    {else}
   <a href="{$node.link}" {if isset($currentCategoryId) && ($node.id == $currentCategoryId)}class="selected"{/if} title="{$node.desc|escape:html:'UTF-8'}">{$node.name|escape:html:'UTF-8'}</a>
{/if}

Y el módulo completo queda de la siguiente manera:

<li {if isset($last) && $last == 'true'}class="last"{/if}>
        {if $node.children|@count > 0}
                <p class="dynamize">{$node.name|escape:html:'UTF-8'}</p>
        {else}
                <a href="{$node.link}" {if isset($currentCategoryId) && ($node.id == $currentCategoryId)}class="selected"{/if} title="{$node.desc|escape:html:'UTF-8'}">{$node.name|escape:html:'UTF-8'}</a>
        {/if}   {if $node.children|@count > 0}
                <ul>
                {foreach from=$node.children item=child name=categoryTreeBranch}
                        {if isset($smarty.foreach.categoryTreeBranch) && $smarty.foreach.categoryTreeBranch.last}
                                {include file="$branche_tpl_path" node=$child last='true'}
                        {else}
                                {include file="$branche_tpl_path" node=$child last='false'}
                        {/if}
                {/foreach}
                </ul>
        {/if}
</li>

Una vez modificado ya lo podríamos comprobar accediendo a la tienda y navegando por las categorías.
Una cuestión importante a tener en cuenta a la hora de hacer modificaciones en Prestashop es el funcionamiento de Smarty. Si en el backoffice tenemos activado que Prestashop use la cache y no compile los elementos, cogerá de la última configuración compilada para servirte las páginas (es el optimizador de Smarty). Si queremos que esta u otras modificaciones en Prestashop estuvieran disponibles en la pagina,  tendríamos que compilar de nuevo las plantillas (desde backoffice, herramientas, rendimiento).