Entradas bajo la categoría ‘Artículos’

WordPress como CMS global

Miércoles, 25 Mar '09

Hasta ahora en mi página web, el blog era sólo una sección, y el resto de las páginas estaban hechas a mano, con su propio sistema de plantillas. Hace tiempo que pensaba en la posibilidad de gestionar todo con WordPress, lo que me permitiría añadir contenido desde su interfaz y también unificar la apariencia.

Por ejemplo, mi web tenía dos sitemaps, uno para la raíz y otro para el blog, dos hojas de estilo (muy similares), etc. Migrar todo a WordPress terminaría con todo este contenido (y trabajo) duplicado, pero el mayor problema era cómo preservar la estructura de la web y las URL’s ya existentes.

Voy a analizar cómo instalar WordPress para usarlo de CMS para toda la web, pero teniéndolo contenido en su propio directorio y conservando la estructura de enlaces actual.

Supongamos una estructura como la siguiente:

  • www.example.com
    • /blog
      • /estructura de WordPress
    • /página1.php
    • /página2.php

Gestión mediante WordPress

La primera pregunta era si instalar WordPress en el directorio raíz, pero era reticente a esto por muchos motivos: primero, por seguridad y segundo por extensibilidad, porque si luego quería montar un wiki en el directorio /wiki/, las páginas del motor del wiki iban a estar mezcladas con las de WordPress. No creo que eso funcionase bien. Tenía más sentido aislar todas las aplicaciones en su propia carpeta, dejando la raíz limpia para otras páginas u aplicaciones.

¿Es posible instalar WordPress en un sub-directorio y aún así hacerlo servir páginas del directorio raíz? La respuesta es que sí, pero con un poco de ayuda. Una página del codex de WordPress explica cómo mover WordPress a su propia carpeta; En mi caso iba a trabajar con una instalación nueva de WordPress, o sea que las instrucciones difieren un poco.

Instalación

Primero instalamos WordPress en una carpeta. Podemos llamar esa carpeta _wordpress o lo que queramos. Tras seguir la instalación estándar, accedemos al panel de control y en la primera pestaña de las opciones (Opciones > General) cambiamos la URL “Dirección del blog” y la apuntamos a nuestro directorio raíz.

Opciones generales de WordPress

El otro campo, “Dirección de WordPress”, debería tener el valor http://www.example.com/_wordpress, o la URL de la carpeta donde lo hayamos instalado. Ahora pulsamos en “Guardar cambios”. Los cambios se guardarán, pero al cargar la página de nuevo WordPress nos dará un error. Tampoco seremos capaces de ver el blog en este punto. Ignoramos este error por ahora.

Ahora tenemos que copiar los archivos index.php y .htaccess del directorio de WordPress al directorio raíz. Los abrimos con un editor y los modificamos. El archivo de index.php por defecto se parece a esto:
< ?php
/**
* Front to the WordPress application. This file doesn't do anything, but loads
* wp-blog-header.php which does and tells WordPress to load the theme.
*
* @package WordPress
*/
 
/**
* Tells WordPress to load the WordPress theme and output it.
*
* @var bool
*/
define('WP_USE_THEMES', true);
 
/** Loads the WordPress Environment and Template */
require ('./wp-blog-header.php');
?>

En la penúltima línea del script, modificamos la ruta para apuntar a nuestro archivo, o sea que en nuestro ejemplo la línea quedaría así:

require ('./_wordpress/wp-blog-header.php');

Ahora deberíamos poder acceder a nuestro panel de administración en http://www.example.com/_wordpress/wp-admin/ y si accedemos a nuestra página (http://www.example.com/), deberíamos ver nuestro blog.

Permalinks y portadas

A partir de aquí, podemos modificar las opciones de WordPress para imitar nuestra estructura de directorios previos, siempre que nuestro servidor tenga activado el módulo “Rewrite” de Apache. La buena noticia es que el 99% de los casos se pueden resolver desde WordPress.

En primer lugar, queremos que la página por defecto no sea la del blog, sino una página de inicio (para imitar nuestra estructura inicial, pero esto es opcional). En el panel de WordPress, creamos esa página y la guardo con el título de “Inicio”. También creamos otra página que podemos llamar “blog” y que podemos dejar vacía. Ahora vamos a Opciones > Lectura y seleccionamos “Una página estática (seleccionar abajo)” como la opción que mostrará la página inicial.

wp_opciones_lectura

En el desplegable elegimos nuestra página “Inicio” y en la siguiente línea (“Página de entradas”) elegimos nuestra página “Blog”. Ahora, al acceder a http://www.example.com/ veremos nuestra página de inicio y al acceder a http://www.example.com/blog/ accederemos a nuestro blog, igual que antes de migrar todo nuestro contenido a WordPress en nuestro ejemplo.

Si ahora además queremos que los demás permalinks se ajusten a nuestra estructura, vamos a la página de Opciones > Permalinks y añadimos /blog/ delante de todos los links.

wp_opciones_permal

Nuestro blog y todas las páginas relacionadas (históricos, categorías, tags, etc.) estarán bajo el directorio virtual /blog/ en nuestro servidor, dejando el directorio raíz libre para páginas que podemos crear con WordPress o fuera del CMS.

Contenido antiguo

Ahora nos ocuparemos del contenido antiguo. Si antes teníamos una página llamada pagina1.php, ahora podemos crear una página en WordPress con el mismo contenido que la página original y asegurarnos de que su “slug” o enlace sea “pagina1″. Ahora debemos asegurarnos de que los enlaces entrantes, ya sean de otras webs o de motores de búsqueda, encuentren esa página y que además les avisemos del cambio para que sea re-indexada correctamente.

Para ello vamos a editar nuestro archivo .htaccess en el directorio raíz y antes de las reglas de permalinks de WordPress, vamos a añadir:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^/pagina1.php [NC]
RewriteRule $ /pagina1/ [L,R=301]

Esta regla hace una redirección externa a /pagina1/ cuando alguien intenta acceder a /pagina1.php dando un código 301 (Movido permanentemente) y para de analizar reglas (L). Esta regla se podría mejorar mediante expresiones regulares para detectar todas las páginas, pero eso ya se sale del alcance de este artículo.

Y creo que eso es todo, aunque hay muchos más detalles en los que no he entrado. Si alguien muestra interés puede que amplíe la serie.

Spam, spam, spam

Martes, 12 Jun '07

En reven.org, desde que instalé Akismet han caido en sus redes 69,289 comentarios que eran básicamente Spam. Muchos comentarios, ¿no? Me parecía que últimamente tenía mucho spam, pero pensé que era porque no le había dedicado demasiado tiempo al blog y los spammers huelen un blog semi-abandonado a mil kilómetros de distancia.

Por eso hoy me he acercado a la página de Akismet y me he quedado flipado al ver las estadísticas.

Gráfica de spam por Akismet, Junio 2007

Hace aproximadamente un año, ya hablé de una oleada de spam y entonces me parecía descomunal el pico de casi unos 3 millones. Ahora estamos ante un pico de más de 18. Uff. El 95% de todos los comentarios publicados son spam.

Hay un pero: Que yo sepa, Akismet no cuenta con ningún factor de corrección que refleje su popularidad. Seguro que parte de ese incremento exponencial se corresponde al incremento en número de blogs que utilicen WordPress y que tengan instalado Akismet. Pero los chicos detrás de Akismet no nos dan estas cifras porque le quitaría encanto a la gráfica y a lo maravilloso que es Aksimet.

Tomando datos muy aproximados de Technorati y de Aksimet, podemos hacer un ratio de Spam/Blogs. Este cálculo no es muy ortodoxo por que:

  • No hay datos mes a mes del número total de blogs
  • El número total de blogs y el número de ellos que utiliza WordPress y Akismet no han crecido igual (sospecho)
  • Puede que la relación fuera más exacta con el número de posts (o es independiente el spam de esto?)

En fin, aquí mis (repito: poco precisos) números, usando la fórmula (Nº de spams según Akismet / Nº de blogs según Technorati) x 100

Ratio spam-blogs Junio ‘06 = 5,5
Ratio spam-blogs Junio ‘07 = 23,1
Parece que efectivamente cada vez hay más Spam.

Mapas visuales

Miércoles, 12 Jul '06

reven.org
reven.blog

Los mapas visuales de páginas web nos dan una idea de qué es lo que está pasando por detrás de las cortinas. Las páginas están normalmente diseñadas desde un punto de vista “humano”, haciéndo énfasis en lo queremos que otra persona perciba al verlas y de forma que la organización espacial de los elementos que la componen hagan la información más accesible o, según los casos, predetermine a esa persona a fijar la atención en un elemento determinado.

La estructura de la información que contienen las páginas debería ser más artificial (o menos humana), ya que los estándares web tienden hacia una separación de contenido y código mediante el uso de etiquetas con valor semántico. Por simplificar mucho una historia muy larga, podríamos decir que la estructura de todas las páginas debería ser la misma:

  • Título
    • Encabecado 1: Contenido
      • Subencabecado 1: Contenido
    • Encabecado 2: Contenido

Pero la realidad es que en ocasiones se utilizan esas etiquetas semánticas un poco fuera de su contexto, p. ej. se puede utilizar un subencabezado con una tipografía más llamativa que un encabezado. Una práctica muy común es utilizar contenedores “dummy” (sin ningún valor semántico, por ejemplo <div> y <span>) para ayudarnos a posicionar elementos en la página o dar mayor peso a determinados contenidos.

A la derecha podéis ver mapas visuales realizados mediante websitesasgraphs. La superior corresponde a la portada de esta web y la inferior a la portada del blog. El significado de los puntos es el siguiente:

azul: enlaces (la etiqueta <a>)
rojo: tablas (etiquetas <table>, <tr> y <td>)
verde: la etiqueta <div>
violeta: imágenes (etiqueta <img>)
amarillo: formularios (etiquetas <form>, <input>, <textarea>, <select>, y <option>)
naranja: párrafos, líneas nuevas y citas (etiquetas <p>, <br> y <blockquote>)
negro: la etiqueta <html>, el nodo raíz
gris: el resto de etiquetas

Me parece una curiosa forma de hacerse una idea del contenido de una página.

Hoy he actualizado mi servidor a Php 5. Esta nueva versión tenía algo de fama de SP2 en el mundillo web, debido a que se habían realizado algunos cambios que podían romper programas escritos para versiones anteriores.

Si algo malo puede pasar, pasará.

El blog y algunas secciones de la página han estado caídos durante un rato. El primer problema (el más importante) que ha surgido ha sido

Fatal error: Only variables can be passed by reference in /var/www/blog/wp-includes/gettext.php on line 66.

He encontrado nuevas versiones del archivo gettext.php con el mismo problema, e inclso parches que solucionaban parcialmente el problema pero que generaban otros errores leves. Al final he encontrado un post de ayuda en la web de WordPress (Localization Problems « WordPress Support), que sugería sustituir
return array_shift(unpack('V', $this->STREAM->read(4)));
que anda por la línea 66 de gettext.php (en la carpeta /wp-includes/), por
$tmp = unpack('V', $this->STREAM->read(4));
return array_shift($tmp);

Y hacer lo mismo con la función que la sigue (sólo varía la ‘V’, que en este caso es ‘N’).

Luego he visto más problemas en funciones mías, pero eran bugs tontos de mi código (p. ej por usar $HTTP_GET_VARS cuando las tengo desactivadas; solución: $_GET).

Luego he tenido un problema misterioso y dificil de reproducir, pero mis sospechas caían en el plugin wp hashcash, que sirve para evitar el spam de los comentarios. Al desactivarlo he visto que todo iba más o menos bien. Hay una versión nueva que intentaré instalar mañana.

Y lo último que me ha fastidiado PHP 5 es la búsqueda con la API de Google, debido a dos cosas: En primer lugar la biblioteca nusoap.php ha quedado obsoleta (creo) y en segundo lugar, PHP 5 incorpora su propio módulo SOAP. Por suerte he encontrado un excelente artículo en francés, Api Google et SOAP, que detalla una API con ejemplos. Sólo he tenido que cambiar las funciones y llamadas en mi script.

Espero que esto se traduzca en mayor estabilidad y rapidez, porque ha sido una pequeña pesadilla.

English

Martes, 25 Oct '05

Desde que inicié mi andadura en internet, mucho antes de que existieran los blogs, he tenido dudas sobre el idioma que iba a utilizar. Me parece que en inglés se puede llegar a un público más amplio (y diverso), pero escribir únicamente en inglés relega el castellano a una segunda posición inmeritoria. En ocasiones he optado por el camino del medio: mantener dos versiones de la web.

Lo de las dos versiones es una solución horrible: Lee el resto de esta entrada »

Información addicional

reven.org

Web, diseño, proyectos, ideas y muchas otras cosas.

Estás viendo todas las entradas bajo la categoría "Artículos".

Suscripción

feed icon Si quieres leer reven.blog en tu agregador de feeds, accede al feed. Si no sabes qué es esto, quizás te ayude una introducción a RSS.

Publicidad

Anúnciate en reven.org

Estadísticas

Actualmente hay 242 entradas y 359 comentarios, repartidos en 18 categorías y marcados con 397 tags.