martes, 15 de diciembre de 2009

Editar la presentación del formulario de crear y editar contenidos en Drupal

Primero agradecer a muchos blog en internet donde encontré partes de la solución a mi problema, sobre todo me fué muy util http://morthylla.blogspot.com/2008/10/personalizar-o-cambiar-un-formulario.html y por supuesto el sitio de Drupal, especialmente en http://drupal.org/node/101092#comment-874839.

¿Cómo personalizar un formulario de edición y creación de tipos de contenidos?, es algo que muchas veces nos hace falta, sobre todo por cuestiones de estética. Una forma sencilla de hacerlo es mediante el uso de css, con esto se pueden ocultar algunos elementos usando el display:none, o poner la etiqueta del componete en frente del mismo y no sobre, cambiar colores y algunas otras cositas. Por eso lo primero que debe hacer es valorar hasta donde llega el cambio que se desea para resolverlo lo mas simple posible.

Puede ser que lo que se quiera hacer sea mas complicado, implique por ejemplo una validación, un cambio de posición de elementos del formulario, que se vean de una forma u otra según el usuario, que tomen tal o mas cual valor por defecto y muchas otras cosas que se pueden mencionar.

Bueno, en resumen, valore lo que puede hacer con css y lo que puede hacer con CCK antes de entrar a esto. Ya vió que no alcanza, entonces:

1- Agregar en el fichero template.php del tema en uso (si no está usando ningún fichero template.php en su tema, le recomiendo que vaya a otro tema, garlan por ejemplo, lo copie y lo pegue en el suyo) las siguientes funciones:


function NOMBREDELTEMA_theme(){
return array(
'tipodecontenido_node_form' => array(
'arguments' => array('form' => NULL),
'template' => 'tipodecontenido-node-form',
),
);
}

// En esta primera función se define dentro del tema cual es el fichero que va a formatear la vista de crear y editar el tipo de contenido "tipodecontenido".


function NOMBREDELTEMA_preprocess_tipodecontenido_node_form(&$vars) {
$vars['variable1'] = drupal_render($vars['form']['title']);
$vars['variable2'] = drupal_render($vars['form']['field_ingredients']);
$vars['variable3'] = drupal_render($vars['form']['field_directions']);
$vars['variable4'] = drupal_render($vars['form']['taxonomy']);
$vars['variable5'] = drupal_render($vars['form']);
}
?>

// es esta función se asigna a variable1, variable2,.............. los valores de los distintos campos y elementos del tipo de contenido "tipodecontenido"

Ahora en el fichero tipodecontenido-node-form.tpl.php puedo manejar las variables variable1, variable2,.....


print $variable1;
print $variable2;
print $variable3;
print $variable4;
print $varaible5;


como podrá apreciar aquí puede hacer cualquier cosa, simplemente cuenta con los campos y elementos para usarlos como desee.

Un consejo, asigne un $vars['variable6']=$vars y luego en el tpl.php imprima print_r($variable6) y ahí podrá ver a cuantas cosas puede acceder.

No hay comentarios: