
Si se quieren hacer modificaciones, como añadir, borrar o alterar campos en formularios (como pueden ser los de añadir contenido, buscadores, logarse..) basta con un utilizar el hook form_alter de drupal.
Los dos parametros de éste hook son los siguientes:
hook_form_alter($form_id, &$form)
- $form_id: Representa la identidad del formulario, es el nombre de la función que genera el formulario.
- $form: Array que contiene las características de todos los elementos del formulario
Para una mejor compresión a continuación mostramos una receta que contiene cómo ingrediente principal el hook form_alter.
Al añadir un nuevo contenido en drupal (existentes como una página u otros contenidos creados con el módulo cck de drupal se puede observar que por el final del formulario siempre aparece un campo de título 'Mensaje de registro'. En muchos casos éste nunca es rellenado por lo que en ésta receta enseñaremos a eliminarlo.

Para ello lo primero que hay que hacer es crear el módulo dónde se escribirá la siguiente función:
function_nombre_módulo_form_alter($form_id, &$form){
Cuando no se saben como se llama exactamente el formulario o los campos que contiene éste, lo mejor es hacer unos 'print' de los parametros anteriormente mencionados, y de ésta forma seran pintados en la página del formulario de drupal:
<?php
function_nombre_módulo_form_alter($form_id, &$form){
print_r ($form_id) ; //identifica el formulario
print_r ($form); //muestra todos los datos de todos los campos del formulario
}
?>Parte del resultado (recordando que la parte que nos interesa es el campo de mensaje de registro del tipo de contenido 'receta'..) es el siguiente.
$form_id:
Gracias al $form_id vemos que el formulario se llama “receta_node_form”, por lo que si los cambios que queremos realizar únicamente queremos que ocurran para éste formulario bastaría con introducir un if dentro del hook:
<?php
function_nombre_módulo_form_alter($form_id, &$form){
if ($form_id=='receta_node_form'){
//los cambios a realizar..
}
}
?>$form:
[log] => Array
(
[#type] => textarea
[#title] => Mensaje de registro
[#rows] => 2
[#weight] => 20
[#description] => Una explicación de las adiciones o actualizaciones que se han hecho para ayudar a que otros autores entiendan sus motivaciones.
)
[author] => Array
(
[#type] => fieldset
[#access] => 1
[#title] => Información de autoría
[#collapsible] => 1
[#collapsed] => 1
[#weight] => 20Entre todo el array que muestra este parámetro nos quedamos con el nombre del campo que nos interesa eliminar : 'log'. Y finalmente mediante la funcion 'unset' (encargada de borrar variables) borramos ese campo:
<?php
function_nombre_módulo_form_alter($form_id, &$form){
if ($form_id=='receta_node_form'){
unset ($form['log']);
}
}
?>Adjuntamos el pequeño módulo (llamado 'form_alter') explicado en esta receta.
En ésta receta se ha visto eliminar un campo, pero tambíen se pueden modificar o añadir. Por ejemplo:
- Modificar la descripción del campo de registro:
<?php
$form['log']['#description'] = 'nueva descripcion del campo..';
?> - Crear un nuevo formulario, por ejemplo un select de nombre ¿Sabes utilizar un form_alter? y con respuestas si o no.
<?php
$defecto=1;
$options = array('si','no');
$form['utilizar'] = array(
'#type' => 'select',
'#title'=> 'Sabes utilizar el form_alter',
'#default_value' => $defecto,
'#options' => $options,
'#description' => t('Escoja entre las opciones si y no')
);
?>
| Adjunto | Tamaño |
|---|---|
| form_alter.tar_.gz | 895 bytes |
Comentarios
Muy Util
Mar, 01/04/2008 - 6:24pm — mrproperCreo que este artículo es de gran utilidad y explica claramente para que sirve un form alter y para que se utiliza. Muchas gracias.
Enviar un comentario nuevo