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