Luis Molina

tecnologías de la información, experiencias, conocimiento

Archive for the ‘Artículos’ Category

Configurar WordPress para varios servidores con un único fichero wp-config.php

with one comment

ejemplo de wp-config.php definiendo conexiones a varias bases de datos

Es una práctica común entre los desarrolladores web el tener varias versiones de un mismo sitio WordPress: versión local, versión en desarrollo, versión de pruebas, versión en producción, etc.

En caso de que no utilices un sistema de control de versiones (SVN, Git, etc.), aquí tienes una manera fácil de mantener un único fichero de configuración wp-config.php que contenga las distintas conexiones a la base de datos, en función del servidor donde se encuentre el fichero.

Edita el fichero wp-config.php y, al principio del mismo, reemplaza los datos de conexión que suelen venir predeterminados por estas líneas (como en la imagen superior):

if ($_SERVER['SERVER_ADDR'] == '127.0.0.1') {
  // Entorno LOCAL
  define('DB_NAME', 'nombreBDlocal');
  define('DB_USER', 'nombreUSRlocal');
  define('DB_PASSWORD', 'contraseñalocal');
  define('DB_HOST', 'servidorlocal'); // normalmente, localhost
} else {
  // Entorno PRODUCCION
  define('DB_NAME', 'nombreBDpro');
  define('DB_USER', 'nombreUSRpro');
  define('DB_PASSWORD', 'contraseñapro');
  define('DB_HOST', 'servidorpro');
}

En cada constante aquí definida, tendrás que escribir los valores correspondientes de las conexiones a tus bases de datos.

Como ves, los parámetros de conexión a la base de datos se definen en función de la IP del servidor donde esté alojado el fichero wp-config.php.

Jugando con $_SERVER['SERVER_ADDR'] y varios if...else if... (o case...switch...) podrás contemplar los distintos entornos en los que se ejecute tu sitio web con WordPress.


Actualización 19/05/2013

Otra manera muy práctica de mantener el mismo wp-config.php en distintos servidores (distintos entornos de ejecución de WordPress) es guardar los datos de conexión a la base de datos de cada entorno en un fichero distinto. En el siguiente ejemplo, se tiene un entorno local de desarrollo y un entorno real de producción:

wp-config-varias-bbdd-2

El código que ponemos en wp-config.php es este:

if ( file_exists( dirname( __FILE__ ) . '/local-config.php' ) ) {
 // ENTORNO LOCAL - DESARROLLO
 include( dirname( __FILE__ ) . '/local-config.php' );
} else {
 // ENTORNO REMOTO - PRODUCCIÓN
 define('DB_NAME', 'dbbd');
 define('DB_USER', 'dbmy');
 define('DB_PASSWORD', 'dbpw');
 define('DB_HOST', 'localhost');
}

Y el contenido del fichero local-config.php es este:

<?php
/**
 * Datos acceso a base de datos local (desarrollo).
 */
define('DB_NAME', 'localdb');
define('DB_USER', 'localdbusr');
define('DB_PASSWORD', 'localdbpwd');
define('DB_HOST', 'localhost');

Si estás utilizando un sistema de control de versiones para tus desarrollos en WordPress, asegúrate de excluir el fichero local-config.php.

 

 

Written by Luis Molina

9 diciembre 2012 at 13:09

Publicado en Artículos

Tagged with , ,

Convertir de SQLite a MySQL

with 9 comments

convertir-sqlite-mysql

Aunque he intentado hacer funcionar de forma aceptable un WordPress con SQLite, finalmente el servidor donde lo alojaba no me facilitaba la tarea así que he decidido utilizar WordPress con MySQL, como toda la vida, aunque tenga que alojar la base de datos en un servidor externo.

Tras investigar  algo por Internet y darme algún cabezazo con imports/exports de SQL, estos son los pasos que he seguido para convertir una base de datos SQLite a MySQL (proceso también conocido como migración de SQLite a MySQL):

  1. Generar una exportación de la base de datos SQLite en un fichero SQL.
  2. Editar el fichero SQL generado para hacer los siguientes cambios:
    • Reemplazar AUTOINCREMENT por AUTO_INCREMENT.
    • Eliminar las comillas dobles en los nombres de los objetos, ya que MySQL no las contempla. Por ejemplo, hay que reemplazar “wp_posts” (incluyendo las comillas) por wp_posts.
    • En los campos que deban ser de tipo fecha/hora, reemplazar text not null default ‘0000-00-00 00:00:00’  por datetime not null. Fíjate en el not null: cámbialo si te conviene que sea null. Además, es posible que tú sí necesites algún valor predeterminado para algún campo de tipo datetime.
    • Eliminar el valor predeterminado (default) de los campos blob/text.
    • En general, repasar todos los campos que tengan formato text (generado por SQLite) ya que que algunos deberán cambiarse por datetime (como he explicado anteriormente) o por varchar.
    • Aunque yo no he tenido que hacerlo, en algún sitio he visto que hay que borrar todas las líneas donde aparezca sqlite_sequence.
  3. Una vez modificado y guardado el fichero (previa copia de seguridad, claro está 😉 ), importar este fichero SQL a la base de datos MySQL (por ejemplo, con phpMyAdmin).
  4. Fin.

Un ejemplo

A continuación muestro un ejemplo de migración de una tabla, lo que viene a llamarse “el antes y el después”:

Tabla wp_comments en SQLite (ANTES)

CREATE TABLE wp_comments (
 comment_ID integer NOT NULL PRIMARY KEY AUTOINCREMENT ,
 comment_post_ID integer NOT NULL default '0',
 comment_author blob NOT NULL,
 comment_author_email text NOT NULL default '',
 comment_author_url text NOT NULL default '',
 comment_author_IP text NOT NULL default '',
 comment_date text NOT NULL default '0000-00-00 00:00:00',
 comment_date_gmt text NOT NULL default '0000-00-00 00:00:00',
 comment_content text NOT NULL,
 comment_karma integer NOT NULL default '0',
 comment_approved text NOT NULL default '1',
 comment_agent text NOT NULL default '',
 comment_type text NOT NULL default '',
 comment_parent integer NOT NULL default '0',
 user_id integer NOT NULL default '0');

 

Tabla wp_comments en MySQL (DESPUÉS)

CREATE TABLE wp_comments (
 comment_ID integer NOT NULL PRIMARY KEY AUTO_INCREMENT ,
 comment_post_ID integer NOT NULL default '0',
 comment_author text NOT NULL,
 comment_author_email varchar(100) NOT NULL default '',
 comment_author_url varchar(200) NOT NULL default '',
 comment_author_IP varchar(100) NOT NULL default '',
 comment_date datetime NOT NULL ,
 comment_date_gmt datetime NOT NULL ,
 comment_content text NOT NULL,
 comment_karma integer NOT NULL default '0',
 comment_approved varchar(20) NOT NULL default '1',
 comment_agent varchar(255) NOT NULL default '',
 comment_type varchar(20) NOT NULL default '',
 comment_parent integer NOT NULL default '0',
 user_id integer NOT NULL default '0');

 
Pues nada más, espero que te sirva.

Written by Luis Molina

14 noviembre 2011 at 21:25

Publicado en Artículos

Tagged with , , , ,

No consigo clientes con mi sitio web

with 2 comments

Esta frase la he oído alguna que otra vez en clientes propios y ajenos, y es que puede haber numerosas causas por las que un sitio web precioso y estupendo y que ha costado mucho dinero no atraiga visitas y, lo peor, que las visitas no se conviertan en clientes. No es preciso que una empresa base su negocio en Internet para que la web deba resultar provechosa: las empresas quieren ganar dinero, sea por el medio que sea, y quieren que una inversión sirva para incrementar sus ganancias.

Hablando con diseñadores web que comienzan su carrera profesional, alguno/a tiene la idea equivocada de que un buen diseño “vende”. Yo creo que un buen diseño puede atraer, pero vender es otra cosa.

A continuación tienes algunas razones por las que tu sitio web puede estar “perdiendo dinero”. Quizá te ayude a detectar algún fallo y corregirlo.

Llamadas a la acción: “Y ahora ¿qué?”

Con frecuencia me he encontrado en páginas web a las que he llegado porque me interesa un producto, tanto como para comprarlo, pero no he encontrado fácilmente la manera de adquirirlo y a los 10 segundos ya estaba cansado y con el interés por los suelos. Es probable que también te haya ocurrido en alguna ocasión y entonces deberías ser consciente de que no quieres eso para tu empresa ni para tu sitio web.

Cada página relevante de tu sitio web debería tener una llamada a la acción claramente visible y diseñada específicamente para que el visitante termine haciendo lo que tú quieres que haga.

Una llamada a la acción en un sitio web puede ser un botón, un enlace, un banner o un formulario que guía a los visitantes hacia el siguiente paso en el proceso de conversión [de visitante a cliente].

CTA Skype

Es conveniente que el visitante perciba de un rápido vistazo tanto el beneficio (texto “hacer llamadas más baratas”) como la manera de obtenerlo (botón “comienza a ahorrar ahora”). Además, vemos cómo podemos incluir en la misma página incluso una segunda acción importante para el negocio: el botón “Ofertas especiales”. Todo ello dispuesto mediante un diseño claro y coherente y expresado en un lenguaje adecuado.

Caso particular: sitios web realizados con Flash

Hay por ahí algunos sitios web realizados íntegramente con Flash en los que los principales problemas a la hora de convertir visitas en clientes  son la falta de contenido útil y la ausencia de guías claras para el usuario, así como caminos y métodos incómodos de navegación por el sitio web.

Veamos este ejemplo:

web flash poco útil

Diseño sobrio, quizá atractivo para alguien… Pero ¿de qué va esta empresa? Esta página de inicio no dice nada, tienes que ser un “visitante curioso” para enterarte de qué va. Además si haces clic en alguna sección, luego tienes que ir cerrando ventanitas para poder acceder a otra.

Es común ver este tipo de páginas incluso hoy en día: son de las que se hacen con el único objetivo de estar en Internet, pero nada más. Porque la URL aparece en la tarjeta de visita.

La falacia del “visitante curioso”

En varias ocasiones, charlando con clientes sobre la creación de su próximo sitio web, ha salido la frase “ponemos todo esto en la web clasificado de esta forma y así la gente, si quiere, podrá visitar cualquier cosa”. Además ha sido un razonamiento difícil de refutar en alguna ocasión debido al peculiar y “corto” punto de vista del cliente.

Este mismo razonamiento también es habitual a quienes gustan de clasificar las cosas y atenerse a esa clasificación por encima de todo. Por experiencia sé que los informáticos tendemos a eso, a veces equivocadamente. Creo que el ejemplo más claro podrían ser tiendas/catálogos online, o directorios temáticos. Veamos:

ejemplo tienda ropa

Mirando la clasificación de la ropa en el menú de la izquierda, no apetece mucho ponerse a buscar una prenda. Veo “Pantalones para Hombre” y “Jeans para Dama” pero ¿habrá jeans para hombre? ¡Buf! Tengo que ponerme a buscarlos… Probablemente esta misma clasificación es la del inventario, que les vendrá bien para la catalogación de las prendas, pero no podemos pretender llevar a la web el mismo modo de clasificación porque no estamos en una tienda física donde uno pasea y localiza los productos de interés de una forma distinta que delante de una pantalla.

Al diseñar una web no puedes limitarte a exponer lo que tienes y esperar, de forma pasiva, que al visitante le guste algo y te lo compre. La gente que visita tu web seguramente no piensa como tú, ni ordena las cosas como tú, ni le gusta las mismas cosas que a ti.

Landing pages: “Esto no es lo que buscaba”

Cuando has puesto el foco en algún producto/servicio de tu web y has decidido darle mucha visibilidad, deberías esforzarte en la investigación de qué palabras/frases clave pueden utilizar los clientes potenciales para encontrar ese producto/servicio en los buscadores, de forma que diseñes una landing page lo más atractiva posible y con los textos más adecuados a las palabras clave que hayas encontrado en tu investigación. Sin olvidar, por supuesto, una clara llamada a la acción.

No es conveniente que tu página salga listada en buscadores (Google, Bing, etc.) para cierto término de búsqueda, una persona haga clic y, al cargar la página correspondiente, no encuentre “eso” que estaba buscando. Es aún peor si esto ocurre tras haber hecho clic en un anuncio tipo Google AdWords, ya que la inversión publicitaria se perderá la mayoría de las veces… a menos que te haya visitado el “visitante curioso” y termine convirtiéndose en tu cliente, cosa muy poco frecuente.

Como ejemplo, he buscado en Google “guitarras baratas”:

guitarras baratas en google

Tras ver los resultados, he decidido hacer clic en el último anuncio de abajo a la derecha, por el cual la empresa correspondiente estará pagando sus euros, y he llegado a esta página:

guitarras baratas en la web

¿Dónde están las guitarras baratas que yo estaba buscando? Lo primero que veo son novedades en CDs, anuncios, un botón de ofertas y más abajo (seguramente por debajo del scroll de muchísimos usuarios) aparece un puñado de guitarras.

Espero que estas ideas te ayuden a definir mejor el diseño y los contenidos de tu sitio web. Cuanto más trabajo en ello, más me convenzo de que cada página hay que planificarla con especial atención. Además, a mayor inversión en el diseño web (con todo lo que ello conlleva), mejores resultados en buscadores y en el boca-a-oreja. ¡Ánimo!

Written by Luis Molina

30 octubre 2011 at 17:44

Tengo un traje de Bere Casillas

with one comment

Sí, ya puedo decirlo. Y además, no cualquier traje, sino un traje de novio 🙂

Retomo la actividad en este blog para compartir lo que ha sido una gran experiencia para mí gracias al cariño y al buen hacer de Bere Casillas, sastre de Granada ya famoso por poner el toque de elegancia 2.0 a la moda masculina. Téngase en cuenta que mi altura (2 metros)  y mis antecedentes (informática y diseño, ya sabéis lo que dicen los tópicos sobre cómo vestimos los frikis) hacían de mí un cliente peculiar.

En un principio, fue la muestra:

Debo decir que guardaba algo de reticencia porque mis experiencias anteriores con ropa a medida no habían sido demasiado satisfactorias, pero ponerme en manos de Bere Casillas ha sido uno de los grandes aciertos de mi boda.

Por supuesto, también ha sido un acierto ponerme en las manos de mi flamante esposa para darle un toque original a mi atuendo: no me refiero a la flor de la solapa que está medio caída, sino al dibujillo bordado que se ve en mi chaleco. Fue la sensación de la boda. Os gusta, ¿eh? Pues ya veis, se le da una idea a Bere y él la procesa y la elabora y la acopla para que uno se sienta a gusto. Y eso es de agradecer.

No sé cuántas veces tuve que ir a probarme pero siempre me encontré cómodo en la tienda y por eso quiero felicitar también al equipo de personas que está allí trabajando.

Creo que merece la pena el esfuerzo que hace Bere Casillas por impulsar su negocio a través de Internet, en el llamado mundo 2.0, donde más allá de las palabras de moda “marketing online” se encuentran personas con las que se puede tener una relación cordial.

¡Ah! Por cierto, me casé el 24 de julio de 2010 😉

Aquí van otras fotos. ¡Hasta pronto!

Written by Luis Molina

12 septiembre 2010 at 20:50

Publicado en Artículos

Probando…

leave a comment »

Probando…

Written by Luis Molina

26 marzo 2010 at 17:16

Publicado en Artículos

Sobre la LOPD y la LSSI-CE

with 6 comments

Gracias a la iniciativa de la Asociación de Webmasters de Málaga, tuve la oportunidad de asistir a una ponencia sobre las leyes de Protección de Datos y de Servicios de la Sociedad de la Información, conocidas como LOPD y LSSI-CE.

El ponente fue Francisco Pardo, quien de una manera amena y sencilla fue comentando algunos de los puntos más interesantes de estas leyes que están directamente relacionados con la creación de sitios web y los negocios en Internet. Las preguntas y comentarios de los asistentes enriquecieron la ponencia y debo decir que fue una experiencia satisfactoria.

Página de información sobre la ponencia

Indico algunos de los puntos que me parecieron relevantes:

  • La Agencia Española de Protección de Datos (AGPD) ha publicado una herramienta llamada Evalúa, que sirve para autoevaluar el grado de cumplimiento de la LOPD.
  • Es importante entender  bien el ámbito de aplicación de la LOPD: cualquier persona o empresa que almacene datos de carácter personal en cualquier medio físico o electrónico debe ajustarse a esta ley.
  • La LOPD contempla un proceso de disociación mediante el cual los datos almacenados no puedan asociarse a ninguna persona identificada o identificable. Por ejemplo, podemos guardar ciertos datos en una tabla de base de datos si identificamos cada registro con un user_id que no permita identificar a una persona  física concreta.
  • Si estamos almacenando datos a los que se le aplica un nivel de seguridad alto, tendremos que utilizar SSL y cualquier otra  herramienta o mecanismo que asegure la privacidad de esos datos.
  • Se contempla también el movimiento internacional de datos, caso que se da cuando almacenamos datos en servidores fuera de España. Debemos estar seguros de que la legislación de esos otros países proporciona al menos la misma garantía de privacidad de datos que la española, cosa que se cumple en cualquier país de la Unión Europea. Por ejemplo, aunque en EE.UU. no existe una ley equiparable a la LOPD española, sí han creado el concepto safe harbor para certificar que una empresa estadounidense está autorizada a tratar con datos de carácter personal europeos.
  • Cuando se cancela (elimina) un dato almacenado, hay que recordar eliminarlo también de archivos históricos tales como las copias de seguridad.

No se profundizó tanto en la LSSI-CE aunque quedó bien claro que jamás se debe enviar comunicaciones comerciales sin consentimiento.

ACTUALIZACIÓN: quiero dar la enhorabuena también a Raúl Jiménez Ortega, de la Asociación de Webmasters de Granada, por su implicación e interés en que este y otros eventos sean un éxito.

Written by Luis Molina

22 febrero 2010 at 17:45

Publicado en Artículos

Tagged with , , ,

Tras el manifiesto

leave a comment »

Fruto de unas lecturas más relajadas y con más tiempo (es lo que tiene la dichosa tecnología actual, que va todo demasiado rápido), publico en este artículo algunas opiniones que me han parecido bastante interesantes para poder tener una visión lo más completa posible de este complejo tema:

En fin, estamos viviendo cambios e intentamos adaptarnos a ellos lo mejor posible. Creo que es bueno que estemos al tanto de todo esto porque, al fin y al cabo, casi todos somos “creadores” de contenidos digitales.

Written by Luis Molina

8 diciembre 2009 at 09:06

Publicado en Artículos

Tagged with , , ,