formularios
Cómo avisar de campo erróneo sin mensaje con form_set_error
Carlos — Vie, 10/09/2010 - 17:24
A veces queremos que un formulario devuelva un error pero no mandar un mensaje o que varios inputs estén como erróneaos (se pongan rojos) pero sólo mostrar un mensaje (por ejemplo cuando es necesario rellenar uno de los dos).
Esta solución no es todo lo "Drupal" que debería ser pero funciona y es corta.
form_set_error('element_name_1', 'Mensaje que saldrá');
form_set_error('element_name_2', 'Mensaje que no saldrá');
array_pop($_SESSION['messages']['error']);
form_set_error('element_name_3', 'Otro mensaje que no saldrá');
array_pop($_SESSION['messages']['error']);
En realidad esto está cómo ejemplo del form_set_error :P
Cómo modificar el formulario de un tipo de contenido en Drupal
Carlos — Mié, 14/01/2009 - 11:57
Pablo (no sé su web) me preguntó en un comentario cómo podía modificar el formulario de un tipo de contenido para adecuar el diseño según sus necesidades.
Lo primero de todo es ver si los cambios que queremos hacer se pueden realizar sólo con CSS ya que así será mucho más fácil y rápido. Estos puede ser algunos trucos:
- Si no queremos que salga algo le ponemos un display: none
- Si un label sale encima del input y queremos que salga en la misma línea podemos poner un display: inline o flotarlo. Esto será necesario hacerlo también con el propio input
- Si por el contrario queremos que salgan en líneas diferentes le ponemos un display: block a lo que queramos que esté él sólo en una línea.
Si vemos que no es posible y que es necesario cambiar el html se puede hacer asi:
Ponemos en el fichero template.php del theme lo siguiente:
<?php
function phptemplate_node_form($form) {
//drupal_set_message("Reescribiendo el formulario de " . $form['#node']->type);
if($form['#node']->type) {
if(file_exists(path_to_theme() . '/forms/form-' . $form['#node']->type . '.tpl.php')) {
//drupal_set_message("Encuentra el fichero y lo reescribe");
return _phptemplate_callback(path_to_theme() . 'forms/form-' .
$form['#node']->type, array('form' => $form));
}
else {
return theme_node_form($form);
}
}
}
?>
Luego creamos un directorio forms en el directorio del theme y allí ponemos las plantillas de nuestros formularios con nombres que sean: form-nombre_del_tipo_de_contenido.tpl.php. Por ejemplo, si tenemos un tipo de contenido que se llama articulos el formulario se llamará form-articulos.tpl.php
Dentro de ese archivo tenemos la variable $form que es un array con cada uno de los campos del formulario. Lo esencial de ese archivo es lo siguiente:
<?php
print drupal_render($form);
?>
Esto imprime todo el formulario. Pero por ejemplo nosotros podemos imprimir primero un campo y luego imprimir el resto:
<?php
print '' . drupal_render($form['trozo_del_formulario') . '';
print drupal_render($form);
?>
Podemos también quitar cosas del formulario dependiendo del usuario:
<?php
global $user;
if ($user->uid <> 1) {
unset($form['body_filter']);
}
?>
Por cierto, en Drupal 6 funciona distinto la forma de decirle que use la plantilla que queremos:
<?php
function nombre_de_tu_tema_theme(&$existing, $type, $theme, $path) {
$hooks['nombre_tipo_contenido_form'] = array( 'arguments' => array('form' => NULL),
'template' => 'path_que_quieras/el_nombre_que_quieras' );
return $hooks;
}
?>
Comentarios recientes
hace 3 años 6 semanas
hace 3 años 39 semanas
hace 3 años 47 semanas
hace 4 años 3 días
hace 4 años 8 semanas
hace 4 años 8 semanas
hace 4 años 9 semanas
hace 4 años 10 semanas
hace 4 años 10 semanas
hace 4 años 11 semanas