Extender taxonomías en Drupal 6
Supongamos que tenemos nuestro listado de taxonomías y lo que necesitamos es poder adjuntarle campos adicionales como si de CCK se tratara. En este caso una descripción adicional para mostrar al publico.
Para ello necesitaríamos extender la cantidad de información relacionada a esta taxonomía y ademas tener la posibilidad de hacer la carga dicha descripción por algún lado.
La información relacionada vamos a guardarla en una nueva tabla en la que el id de la misma este relacionada con el id de la taxonomía que vamos a modificar:
/**
* Implementation of hook_schema.
*/
function extender_taxonomy_schema() {
$schema['extender_taxonomy'] = array(
'fields' => array(
'tid' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
'description' => t("nuestra referencia al term"),
),
'descripcion_usuarios' => array(
'type' => 'text',
'size' => 'normal',
)
),
'primary key' => array('tid'),
'indexes' => array('tid' => array('tid'))
);
return $schema;
}
Ahora bien, el punto que he seleccionado para ofrecer la posibilidad de extender una taxonomía es lógicamente la de creación/edición de la misma. Parece una tontería que aclare algo tan obvio pero no se olviden que hay mas formas de encontrar solución a estos asuntos.
Entonces para agregar un field nuevo a la pantalla de administración de una taxonomía tenemos que alterar el formulario de la misma por medio del hook_form_alter(). En este caso usamos un alter especifico:
/**
* Implementacion del hook_form_alter
* Modificamos un poco la visualizacion de la edicion de una taxonomia y agregamos un field de imagen para asignarle imagenes
*/
function extender_taxonomy_form_taxonomy_form_term_alter(&$form, $form_state){
//En el caso de que estemos editando una taxonomia cuya cabecera hubiera sido cargada con anterioridad, tratamos de recuperarla para mostrarsela al usuario.
$db_extender_taxonomy = db_fetch_object ( db_query ( "SELECT * FROM {extender_taxonomy} WHERE tid = %d", $form ['#term'] ['tid'] ) );
//definimos el nuevo textarea para nuestra descripcion.
$form['identification']['descripcion_usuarios'] = array(
'#title' => t('Descripción para los usuarios'),
'#type' => 'textarea',
'#description' => t('Descripción que se le mostrará a los usuarios cuendo naveguen por esta taxonomía.'),
'#default_value' => $db_extender_taxonomy->descripcion_usuarios,
);
}
Ahora necesitamos poder tomar los datos rellenados en el formulario que hemos extendido y guardarlos en nuestra tabla. Para ello vamos a usar el hook_taxonomy():
/**
* implementacion de hook_taxonomy
* Capturamos en envio de una taxonomia para actuar en consecuencia y poder guardar su información adicional
* */
function extender_taxonomy_taxonomy($op, $type, $array = array()) {
switch ($type) {
case 'term' : //nos interesa en caso de que sea un term y no un vocabulario
//Preparemos los datos para insertar o actualizar:
$datos = new stdClass ();
$datos->tid = $array ['tid'];
$datos->descripcion_usuarios = $array ['descripcion_usuarios'];
switch ($op) {
case 'insert' :
//escribomos en ls DB
drupal_write_record ( "extender_taxonomy", $datos );
break;
case 'update' :
/*
Antes de actualizar los datos extendidos de una taxonomia tenemos que serciorarnos
que la informacion extendida exista, y en caso de que no fuera asi mas bien
insertamos antes que actualizar:
*/
//tratemos de encontrar la taxonomia que vamos a actualizar
$existe = db_fetch_object ( db_query ( "SELECT tid FROM {extender_taxonomy} WHERE tid = %d", $array ['tid'] ) );
if ($existe) {
drupal_write_record ( "extender_taxonomy", $datos, "tid" );
} else {
drupal_write_record ( "extender_taxonomy", $datos );
}
break;
}
break;
}
}
Bien, ya tenemos todo lo que necesitamos. lo único que hace falta es probar nuestro código. Para facilitar un poco el tramite les dejé un modulo que pueden descargar a continuación con el código que estuvimos creando recién para que lo habiliten y prueben en sus instalaciones de drupal.
Van a poder ver que al crear o editar una taxonomía se van a encontrar el textarea que estuvimos trabajando. Y si escriben información en este campo se pueden ir a la base de datos en la tabla que especificamos antes para verificar que efectivamente la información relacionada se esta guardando.
De acá en mas solo queda divagar con las posibilidades que ofrece esta técnica: Imágenes, videos, desplegables…. podes hacer verdaderas virguerías si te hace falta.

Hola, muchas gracias por esta información, me ha sido muy util.
Solo me falta un detalle y quería saber si me puede ayudar…
Necesito que este campo aparezca en la pantalla de visualización del catalogo.
Como hago para imprimirlo en pantalla.??
Gracias