viernes, 11 de diciembre de 2009

Quitar el título a un tipo de contenido en Drupal 6.x

A veces el campo título nos resulta engorroso, sobre todo cuando vamos a tener un sitio para gestión de datos, donde hay muchas relaciones y donde no es un sitio de noticias propiamente.

El campo título es obligatorio dentro del core de drupal, lo primero para hacer que el título no sea obligatorio es modificar el módulo node (node.module). Ir al módulo node y buscar la función:

function node_content_form($node, $form_state) {
$type = node_get_types('type', $node);
$form = array();

if ($type->has_title) {
$form['title'] = array(
'#type' => 'textfield',
'#title' => check_plain($type->title_label),
'#required' => TRUE,
'#default_value' => $node->title,
'#maxlength' => 255,
'#weight' => -5,
);
}

if ($type->has_body) {
$form['body_field'] = node_body_field($node, $type->body_label, $type->min_word_count);
}

return $form;
}

aquí lo único que debe hacer es cambiar el valor TRUE de la propiedad #required por FALSE. Con esto resolvemos que en los nodos no sea requerido el campo título.

Hasta aquí todo sencillo, ahora, cuando necesito crear un nuevo tipo de contenido lo primero es que tendré que definir las etiquetas para el campo Title y Body, en el caso de Body si dejamos el textbox en blanco, pues se elimina ese campo del formulario, pero como eliminar el campo título, no podemos borrar la etiqueta Title y ya, pues es requerido ese valor. Una opción es tomar nuestro primer campo del nuevo tipo de contenido y usarlo como título, pero esto nos trae algunos inconvenientes, que son salvables, pero para el que desee quitarse el título, aquí va.

Haremos algo similar a lo anterior, lo que ahora en el fichero content_type.inc, que se encuentra dentro de la carpeta del módulo node. En este fichero buscar la función node_type_form, el fragmento de códico:

$form['submission']['title_label'] = array(
'#title' => t('Title field label'),
'#type' => 'textfield',
'#default_value' => $type->title_label,
'#required' => TRUE,
);

y al igual que en el caso anterior, cambiar el valor de #require de TRUE a FALSE. Con esto ya podrémos crear nuevos tipos de contenidos sin el campo título.

El problema existe si su sitio va a contar con muchos contenidos relacionados y hará uso de los campos tipo node_reference, puesto que estos lo que muestran para referenciar es el campo title (aunque se referencia por el campo nid), luego como el título está en blanco en la base de datos, el listbox no mostrará nada.

Una forma para resolver esto es incluir el módulo View y el módulo node refrence view. Luego:

1-Hacer una vista que seleccione el campo deseado del node tipo que deseo para hacer la referencia ( Ej: seleccionar el campo nombre del tipo de contenido persona ).

2- Al crear con el CCK el campo tipo node_reference en la configuración, en la sección Advanced - Nodes that can be referenced (View), en View used to select the nodes: escoger la vista creada.

Con esto queda resuelto que lo que me muestre a la hora de crear el contenido no sea la lista de títulos de los nodos tipos "X", sino el resultado de la vista.

El problema que persiste es el de la presentación. Eso se resuelve creando un fichero en el tema con el nombre node-content-dato.tpl.php donde "dato" es el nombre del tipo de contenido en cuestión. O manejando la presentación con módulo content template (comtemplate).

Con todo esto se resuelve el problema, temporalmente.

MEJORES OPCIONES

1- Usar el módulo node reference explorer, que necesita del módulo jquery_UI, que a su vez necesita de la extención jquery_ui 1.6, pero que no se puede descargar de google code por ser cubanos.

2- Esperar a que me de por implementar un módulo que haga esto (eso puede demorar meses, hasta que esté de ánimo y aprenda cosas que no se, mejor se lo piden a la comunidad de drupal que es más áctiva).

1 comentario:

Anónimo dijo...

Hola Maikel, he leído tu post sobre como quitar el título a un tipo de contenido en Drupal 6.x. Bien me ha funcionado pero ahora me surje un problema. Cuando voy a <> resulta el campo título sale vacío al haberlo quitado del formulario. Me gustaría saber como puedo asignar a otra etiqueta creada por mi que sea esa la referencia de título. No se si me entiendes. Por ejemplo, una etiqueta que he creado yo que es "color" pus hacer que esa sea la referencia.

Si puedes contestarme a alesdzlz@gmail.com te lo agradecería.
Un saludo.