Sofa Naranja ahora, con un 125% más de naranja

Destacando enlaces externos en WordPress

Hay pequeños detalles que hacen la vida de los visitantes de tu blog un poco más agradables. Uno de ellos es destacar de alguna manera qué enlaces son internos (es decir, conducen a otra página de tu web) y cuáles son externos (conducen a un sitio distinto).

Para Sofá Naranja quería añadir esta funcionalidad. Empecé a buscar plugins para WordPress, pero al cabo de un rato llegué a la conclusión de que ninguno me convencía demasiado, y acabé programando un hack que hace lo mismo.

El resultado que quería conseguir es este:

Enlace interno y externo

Los enlaces externos son del mismo color, pero les añado un pequeño icono a la derecha.

Para no meterme demasiado en las tripas del monstruo, y para hacer algo portable, decidí trastear un poco con JavaScript.

La idea de mi script es la siguiente:

  • Recorro todos los tags <a href...>
  • Miro si el enlace contiene la URL de mi blog.
  • Si no es así, le aplico un estilo CSS.

Aquí va la cosa:

var links = document.getElementsByTagName('a');
for(var i=0 ; i < links.length; i++){
    var link = links[i];
    if(link.href.indexOf(’sofanaranja.com’) == -1){
        //  es un enlace externo
        link.style.paddingRight = “10px”;
        link.style.backgroundImage = “url(/images/aoutside.gif)”;
        link.style.backgroundPosition = “right center”;
        link.style.backgroundRepeat = “no-repeat”;
    }
}

Lo que hago es asignar a la variable links todos los tags <a ...> de la página. Luego voy mirando si el href del enlace contiene la URL de mi blog con indexOf(), que devuelve -1 si no se ha encontrado la cadena.

Una vez localizado un enlace externo, sólo falta cambiar los atributos CSS. Esto se hace accediendo a los atributos con objeto.style.nombreDelAtributo

Hay que decir que los nombres de atributos en JavaScript no son exactamente iguales que en CSS. Imprescindible usar esta lista de conversión de propiedades CSS a atributos de JS.

Ahora viene la gran pregunta: ¿y cuándo se ejecuta esto?

Yo lo he puesto en el evento onload de body:

<script type="text/javascript">
    function init(){
        var links = document.getElementsByTagName('a');
        for(var i=0 ; i < links.length; i++){
            var link = links[i];
            if(link.href.indexOf(’sofanaranja.com’) == -1){
                //  es un enlace externo
                link.style.paddingRight = “10px”;
                link.style.backgroundImage = “url(images/aoutside.gif)”;
                link.style.backgroundPosition = “right center”;
                link.style.backgroundRepeat = “no-repeat”;
            }
        }
    }
</script>
<?php wp_head(); ?>
</head>
<body onload=”init()”>

Este cambio lo he puesto en el fichero header.php de mi tema de WordPress, para que funcione en todas las páginas del blog (incluyendo las que no son posts).

El icono es gentileza de web-graphics.com.


Publicado
31 December 2005 @ 5pm

Categorías
Diseño

Puliendo el diseño…

Ando trasteando con el diseño de Sofá Naranja (algún iconillo por allí, algún CSS por allá, un JS por acullá…) así que si algo se rompe espero que sean pacientes.

También me he propuesto hacer que la página se vea como dios manda con Explorer. Supongo que fracasaré estrepitósamente, pero se hará lo que se pueda…

Si encuentras algún fallo, te agradeceré que dejes un comentario :D


Publicado
26 December 2005 @ 6pm

Categorías
Software

Mini-review: Mint™

Hacía mucho tiempo que tenía ganas de ponerle las zarpas encima a Mint™, el sistema de estadísticas web de Shaun Inman (basado en un producto anterior llamado ShortStats)

Finalmente (no sé por qué, sinceramente) acabé cediendo a la tentación y pillando una licencia de Mint™ para Sofá Naranja.

Primero, lo más duro: Mint™ cuesta dinero (!!!). Y además, es bastante caro. 30 dólares, personalmente, me parece mucho dinero por lo que ofrece el producto.

Y ahí está la única pega. El resto del sistema está tan bien hecho, funciona tan bien y es tan bonito que se te olvidan rápido los 30 pavos.

Un vistazo a Mint™:

Para los curiosos, aquí va una captura completa de las estadísticas de Sofá Naranja:

Una de las ventajas de Mint™ es el soporte para plugins (”peppers”) que amplían la funcionalidad del producto de una forma infinita (o al menos todo lo infinita que pueda ser la funcionalidad de un programa de estadísticas)

En la captura de pantalla están instalados los siguientes peppers:

  • FreshView, para ver un gráfico con tus visitas diarias.
  • Outclick, para controlar cuales son los puntos de salida de tu web.
  • XXX Strong Mint, para ver las IPs de tus visitantes.
  • User Agent 007, Window Width y Local Searches, que vienen incluídos en Mint™ (aunque no se instalan por defecto)

La verdad es que Mint™ es rápido, es bonito, y funciona. Otros sistemas de estadísticas (como Google Analytics) proporcionan más información, pero lo hacen a costa de la facilidad de uso. Yo hasta ahora venía usando BAStats (un plugin para WordPress la mar de apañao) que no es tan maravilloso como Mint™, pero tiene la indudable ventaja de que funciona “dentro” de WordPress (bueno, y que es gratis : )

Para usar Mint™ necesitarás PHP, MySQL y trastear un poco las plantillas de tu blog. También es imprescindible que tus usuarios tengan activado JavaScript (hmmm…). Para poder ver las estadísticas como dios manda (Mint™ usa CSS2, mucho AJAX y mucho JavaScript) te recomiendo algún navegador decente.

Un detalle (sólo para freaks, geeks y programadores) es la limpieza del código de Mint™. A veces, por las noches, sueño que mi código tiene esa pinta :D

Para terminar, una pequeña película de demostración de Mint™.

Conclusión:

¿Me volvería yo a fundir los 30 pavos en Mint™? Pues no lo sé… por una parte, la funcionalidad y la estética del producto son inmejorables. Por otro lado, BAStats y Google Analytics me servían bastante bien para lo que necesito (y para lo que no necesito también :). Aunque uno es un tío raro, y lo mismo sólo por mirar el código merece la pena… Lo que sí tengo claro es que si supiera lo justito para instalar Mint™ (cosa que no es demasiado complicada gracias al asistente de instalación) y tuviera la necesidad de ver estadísticas detalladas de mi web, quizá no me importara el precio. Aunque sea caro : )


Publicado
25 December 2005 @ 5pm

Categorías
Freak, Gadgets, Mac

Maravillas de la técnica: Algodón Mágico + iPod

Todo el que tenga un iPod y sea tan desastroso como yo cuidando sus gadgets, podrá atestiguar que el punto flaco del cacharro (que alguno tenía que tener…) es que a los 6 meses parece que tiene 6 años.

Concretamente, mi iPod 4G con un año justo daba auténtico asco (y hombres recios han llorado al ver el lamentable estado de la pantalla de la pobre criatura)

Hoy, mirando entre las montañas de trastos que tengo acumuladas, me he encontrado con esto:

Un bote de “Algodón Mágico” (un producto que todo el mundo debería tener en casa en virtud de sus múltiples utilidades)

El Algodón Mágico es un invento curioso… para quien no lo conozca, es como si metieras un paquete de Kleenex en gasolina y crema hidratante y los envasaras en una lata. Su utilidad principal es devolverle el brillo (”lustre” es la palabra precisa, en realidad) a los objetos de plata y otros metales.

Rápidamente, uno va uniendo cabos, y llegado el primer aniversario de mi iPod (fecha en la cual le pierdes todo el respeto a los cacharros, al menos en mi caso) no se me ocurrió otra cosa que pulir la pantalla del susodicho trasto.

El resultado, tras un par de minutos de frotamientos y posterior limpieza con un pañito húmedo de algodón, es este:

Para quien no haya visto la pantalla antes, no es una foto impresionante. Pero a mí se me saltan las lágrimas cada vez que la veo y me acuerdo de cómo estaba esto hace 15 minutos…

No recuerdo el precio del bote (así sin pensarlo yo diría que no vale más de 4 euros) (update: una lata de Algodón Mágico cuesta 1.95 euros), pero teniendo en cuenta que con un tarro de Algodón Mágico se pueden pulir chorrocientos iPods (también por detrás, ojo…) y que es una cosa la mar de útil para otros menesteres, la verdad es que merece la pena.

Para comparar, aquí va un listado de productos para limpiar iPods:

Esto sin contar los gastos de envío…

Además de para iPods, el algodón mágico es bastante útil para limpiar los arañazos de los iBook y de los PowerMac antiguos (con caja de plástico). Para los PowerBook no sé si vale, porque todavía no hace un año que tengo el mío :D

Total… que el Algodón Mágico es una Cosa Guapa™ (y además tiene el encanto añadido de lo tradicional… seguro que tu abuela tiene un bote debajo del fregadero : )

Advertencia: Ni se te ocurra usar Algodón Mágico en una TFT (es que hay que decirlo todo, que luego pasa lo que pasa…)


Publicado
24 December 2005 @ 9pm

Categorías
Código, JavaScript, PHP

JSON, otra idea que mola…

Uno de los grandes inconvenientes a la hora de desarrollar aplicaciones web es el intercambio de información entre las partes de la aplicación.

Uno de los objetivos de XML es, precisamente, solucionar este problema. Pero a veces usar XML es como matar moscas a cañonazos.

Un ejemplo… tienes un Array en JavaScript y quieres usarlo en PHP…

La opción XML pasa por:

  • Convertir el array en un XML (tremendo coñazo)
  • Pasarle el XML al servidor
  • Parsear el XML en el servidor
  • Convertir los datos en un array

El sistema es un poco plasta, además de ser un coñazo cuando cambian las especificaciones de datos (¡sorpresa! ¡el cliente ahora quiere los datos en un Array multidimensional!)

Para solventar este y otros muchos inconvenientes, se crea JSON, un formato de intercambio de datos “ligero” basado en JavaScript.

Existen implementaciones de JSON en casi todos los lenguajes que merecen la pena. Aquí va un mísero ejemplo usando PHP-JSON y JSON en JavaScript. El código es muy simple: creamos un Array en PHP y se lo pasamos a JavaScript para trabajar con él…

<?php
    include("JSON.php");
    $json = new Services_JSON();
    $my_array = Array(1,2,3,4,5);
    $myjson = $json->encode($my_array);
?>
<script src="json.js" type="text/javascript" language="javascript" charset="utf-8"></script>
<script>
    var myArray = JSON.parse('<?php echo $myjson; ?>');
    alert(myArray[0]);
</script>

Fantástico… en el alert aparece ‘1′… te acabas de ahorrar un dolor de cabeza…

¿Funcionará con objetos?

Veamos…

<?php
    include("JSON.php");
    $json = new Services_JSON();
    $foo->id = 'Foo';
    $foo->Class = 'Object';
    $myjson = $json->encode($foo);
?>
<script src="json.js" type="text/javascript" language="javascript" charset="utf-8"></script>
<script>
    var myObj = JSON.parse('<?php echo $myjson; ?>');
    alert(myObj.id);
</script>

Dios mio! En el alert aparece ‘Foo’! :D

Sin entrar a valorar si JSON tendrá el mismo futuro que WDDX (una tecnología parecida, igualmente práctica y que no usa nadie), la verdad es que a mí por lo menos me va a venir de coña para un par de chorradas que ando programando…

Espero que el hecho de que Yahoo haya empezado a ofrecer sus Web Services en JSON le de un empujoncillo al sistema.

Si te has quedado con ganillas de más, aquí va un tutorial de XML.com: JSON and the Dynamic Script Tag: Easy, XML-less Web Services for JavaScript