UnDomain Un friki suelto por la red

BlogRoll en Drupal 6 (y en la versión que sea)


Por fin, y después de no se cuantas vueltas a google... he podido montar un blogroll en Drupal 6.

Mi buen amigo Pedro me recomendó un modulo, pero el problema es que solo funciona con PHP 5 y mi host usa PHP 4 (que se le va a hacer).

Así que como buen friki que es uno, no me ha quedado mas remedio que montarle el mío propio.

A continuación pongo todos los pasos para que lo puedas usar tu mismo...

Antes de empezar, aviso que este BlogRoll es casero y rápido... asease, que no tiene un panel de administración ni nada por el estilo. Se tiene que gestionar todo directamente sobre la BDD.

Aunque claro, si alguien sabe como, y quiere, puede currarse un modulo para gestionarlo. Así de paso me lo masa a mi ;) (que pasa! yo no tengo tiempo! XP).

Bueno.... al meollo...

Lo primero de todo, necesitas tener instalado un modulo que te permita poner código PHP en un bloque.
Puedes usar, por ejemplo, el modulo PHP Filter.

Una vez que puedes poner código PHP en los bloques, es hora de empezar por el principio de todo: las tablas.
Guardaremos todos nuestros links en la BDD, así que empezamos con la creación de las dos tablas que necesitamos:

- DRUPAL_BLOGROLL_IND:

CREATE TABLE `drupal_blogroll_ind` (
  `id` int(11) NOT NULL auto_increment,
  `orden` int(11) NOT NULL default '0',
  `texto` varchar(255) NOT NULL default '',
  `activo` int(1) NOT NULL default '1',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

En esta tabla guardaremos todas las categorías que queramos crear en el blogroll.
Sus campos son los siguientes:

ID: Identificador autonumérico. Es el campo que usaremos con los links para asociarlos a un grupo u otro.
ORDEN: Es el peso del elemento. A menos peso, mas arriba esta. Sirve para ordenar las categorías. Si se indica el mismo peso a varias categorías, estas se ordenan por orden alfabético.
TEXTO: Es el titulo que se muestra en la pagina.
ACTIVO: Si ponemos un número distinto de 1, no se verá en la pagina ninguno de los links asociados a esta categoría (y el titulo tampoco, por supuesto).

- DRUPAL_BLOGROLL:

CREATE TABLE `drupal_blogroll` (
  `id` int(11) NOT NULL auto_increment,
  `indice_id` int(11) NOT NULL default '0',
  `orden` int(11) NOT NULL default '0',
  `nombre` varchar(255) NOT NULL default '',
  `url` varchar(255) NOT NULL default '',
  `title` varchar(255) default NULL,
  `activo` int(1) NOT NULL default '1',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Esta tabla contendrá todos los enlaces de nuestro blogroll.
Sus campos son los siguientes:

ID: Es un identificado único para cada registro. Es automático y no cumple ninguna función remarcable (salvo la de ser la Primary Key :P)
INDICE_ID: Es el ID de la categoría creada en al tabla anterior. Si se indica un ID que no existe o incorrecto, el enlace no aparecerá en el BlogRoll
ORDEN: Lo mismo que en la otra tabla, sirve para ordenar los enlaces. Los enlaces con el mismo peso son ordenados alfabéticamente.
NOMBRE: Es el nombre de la pagina. Este texto es el que aparece en el BlogRoll con el enlace.
URL: La dirección de la pagina... si esto no hacemos nada ;)
TITLE: Es el texto que aparece cuando pasas el cursor por encima... lo puedes dejar en blanco. La idea original es que si una web tiene el nombre muy largo, recortarlo en el campo NOMBRE y ponerlo completo aquí. Le puedes dar el uso que mas rabia te dé ;)
ACTIVO: lo mismo que en la tabla anterior... si le pones un valor distinto de 1, no aparece el enlace.

-El Bloque:

Ya tenemos creada la base, mas concretamente las tablas de la Base de datos.
Ahora toca la última parte, ¡y la mas fácil!

En la sección de administración de tu Drupal, entra en la sección de bloques (Blocks).

Solo tienes que crear un bloque nuevo (con las opciones que prefieras, pero acuerdate de activar el formato PHP del bloque o no funcionará) y poner el siguiente código en él:

<?php
$query = db_query("select * from drupal_blogroll_ind where activo=1 order by orden asc, texto asc;");
  
while ($result = db_fetch_object($query)) {
    echo '<h2>';
    echo $result->texto;
    echo '</h2><ul>';
    $SQL2='select * from drupal_blogroll where indice_id=%d and activo=1 order by orden asc, nombre asc;';
    $query2 = db_query($SQL2, $result->id);
    while ($result2 = db_fetch_object($query2)) {
        echo '<li><a href="'.$result2->url.'" target="_blank" title="'.$result2->title.'">'.$result2->nombre.'</a>';
    }
    echo '</ul><p>';
  }
?>

Ahora solo te queda rellenar las tablas con tus enlaces preferidos y listos, ya tienes tu BlogRoll, sencillo y resultón.

El código PHP es posible que no sea el más optimo ni adecuado, pero de PHP estoy flojo, axial que agradeceré ampliaciones, correcciones y lo que sea.

Muchas gracias y a disfrutarlo!!

Actualizado [26/9/2008] : El buen amigo Pedro (si, el mismo del principio) me ha hecho una pequeña mejora de seguridad en el script y el código está actualizado.
Muchas gracias majete!

Rstá muy bien Moi! solo dos

Rstá muy bien Moi! solo dos cositas:

Puedes crear un bloque a través de un módulo usando el hook_block: http://api.drupal.org/api/function/hook_block/5
Cuando hagas una llamada a db_query, mejor hazla con placeholders, para evitar problemas de SQL Injection, pej

$SQL2='select * from drupal_blogroll where indice_id=%d and activo=1 order by orden asc, nombre asc;';
$query2 = db_query($SQL2, $result->id);

Saludetess

En drupal 5 no se como va el

En drupal 5 no se como va el tema de bloques, pero en el 6 tienes una opción en el menu que te permite crear un bloque con un solo click... supongo que el modulo que comentas hace lo mismo.

En cuanto al SQL-Injecting... no me he preocupado porque no hay interefencia del usuario, asi que poca cosa se puede hacer :P

Por cierto... te podrias currar un pequeño modulo para administrar esto desde la propia web (o me explicas como se crea)... :D

Enviar un comentario nuevo

El contenido de este campo se mantiene privado y no se mostrará públicamente.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Saltos automáticos de líneas y de párrafos.

Mientras tanto, en "¿Alguien ha visto mi martillo?"...


Inicio de sesión


Todo el contenido mostrado ha sido obtenido libremente por la red. Las marcas indicadas son propiedad de sus legítimos dueños y se muestran a modo informativo de manera libre y voluntaria, sin intención publicitaria ni ánimo de lucro. Todo el material propio, y salvo que se indique lo contrario, se encuentra bajo licencia Creative Commons. Si tienes el Copyright de algún contenido o has detectado algna anomalia, por favor, infórmalo al correo undomain@gmail.com para ser corregido cuanto antes. El autor de esta Web no se hace responsable del contenido de terceras personas y de sites ajenos a este.

Powered by Drupal, an open source content management system