Vous êtes sur la page 1sur 3

Personalizando un formulario de CCK

Thu, 2007-05-03 13:25 Mauro

Pasos a seguir papa personalizar un formulario en CCK 1- Haber creado un nodo mediante el Modulo de CCK, necesitamos en nombre del tipo de nodo, para eso vamos a: Menu de Navegacin: Administrador->content->content-type En la tabla donde aparecen todos los content-types, bajo el label TYPE se encuentra el nombre que vamos a utilizar en el cdigo. en este caso: "empresas"

2- Crear un archivo de extencin tpl.php


Donde se pondr el cdigo para el formulario personalizado. por ejemplo: "empresas_form.tpl.php", para crear este archivo simplemente copiamos cualquier archivo de extencin "tpl.php" que haya en nuestro sitio y le cambiamos el nombre. El siguiente paso es borrar todo el contenido de ese archivo, ms tarde pondremos el contenido que necesitamos.

3- Insertar el cdigo en el archivo template.php


Si no tenemos un archivo template.php, hay que crear uno. En este archivo se pone el cdigo que informa al sistema donde debe imprimir el frmulario para el node-type que estamos personalizando, en este caso el node-type llamado "empresas". El cdigo y la explicacin pueden encontrarse en http://drupal.org/node/98253 En nuestro archivo template.php ponemos:

if ((arg(0) == 'node') && (arg(1) == 'add') && (arg(2) == 'empresas')) { function phptemplate_node_form($form) { return _phptemplate_callback('empresas_form', array('user' => $user, 'form' => $form)); } }
para verificar que el cdio esta funcionando correctamente podemos poner un cdigo en la pagina llamada"empresas_form.tpl.php", por ejemplo:

print 'formulario personalizado'


de ese modo cuando queramos crear un contenido del tipo empresa, si todo funciona bien, aparecer en la pagina el texto: "formulario personalizado".

4- Como mostrar los campos del formulario en nuestra pgina

Para mostrar todo el formulario en la pgina, el cdigo que se debe pegar en "empresas_form.tpl.php", debemos utilizar el siguiente cdigo:(para drupal 5)

print_r(drupal_render($form));
Pero la idea es poder mostrar los campos del formulario del modo que elijamos, para eso es necesario poder etraer los campos del formulario uno por uno. Si solo quisieramos mostrar el campo correspondiente al titulo, el cdigo a pegar en nuestra "empresas_form.tpl.php" sera:

print_r(drupal_render($form['title']))
el campo correspondiente al titulo es $form['title'], una forma para saber cual es el nombre de todos los campos que se encuentran en el formulario debe pegarse el siguiente codigo en "empresas_form.tpl.php"

print_r($form)
Mostrando Campos de Taxonoma En el caso de tener formularios con campos de taxonoma, el cdigo para mostrar dichos camos sera:

print_r(drupal_render($form['taxonomy'][tid])) ;//si no es free taging print_r(drupal_render($form['taxonomy']['tags'][tid];//si es free taging

Mostrando otors tipos de Campos Normalmente para el resto de los campos el cdigo es el siguiente:

print_r(drupal_render($form['nombre_del_campo']))

5-Mostrando el resto del Formulario


Podemos hacer lo anterior con cada uno de los campos del formulario, ncluyendo los botones de submit y preview, pero si no nos interesara seguir separando los campos del formulario individualmente, bastara colocar el siguiente cdigo para mostrar el resto de los campos:

print_r(drupal_render($form))
el cdigo anterior mostrar todos los campos del formulario que falten mostrar, sin repetir los ya mostrados.

6- Editando el formulario
Falta generar el codigo que nos llevara al mismo formulario personalizado cuando queramos editar el nodo. Ya que el formilario de edicin no es el mismo de agregar nodos. Para hacer esto es necesario agregar un nuevo cdigo al "tenplate.php". Para nuestro ejemplo sera. ($node->type == 'empresas')

if ((arg(0) == 'node') && (arg(2) == 'edit')){ $node = node_load(array('nid' => arg(1))); if ($node->type == 'empresas') { function phptemplate_node_form($form) { return _phptemplate_callback('empresas_form', array('user' => $user, 'form' => $form)); } } }

7- Resumen
template.php

if ((arg(0) == 'node') && (arg(1) == 'add') && (arg(2) == 'empresas')) { function phptemplate_node_form($form) { return _phptemplate_callback('empresas_form', array('user' => $user, 'form' => $form)); } } if ((arg(0) == 'node') && (arg(2) == 'edit')){ $node = node_load(array('nid' => arg(1))); if ($node->type == 'empresas') { function phptemplate_node_form($form) { return _phptemplate_callback('empresas_form', array('user' => $user, 'form' => $form)); } } }
empresas_form.tpl.php

print_r(drupal_render($form['nombre_del_campo']));//campos comunes print_r(drupal_render($form['taxonomy'][tid])) ;//si no es free taging print_r(drupal_render($form['taxonomy']['tags'][tid];//si es free taging print_r(drupal_render($form));//muestra el resto del formulario