Foros del Web » Creando para Internet » Sistemas de gestión de contenidos » Drupal »

Problemas con la creacion de formulario en drupal 6.2

Estas en el tema de Problemas con la creacion de formulario en drupal 6.2 en el foro de Drupal en Foros del Web. Buenas a todos, Estoy intentando crear un formulario en mi módulo personalizado siguiendo los pasos del tutorial pero no me funciona el "submit". En el ...
  #1 (permalink)  
Antiguo 14/05/2011, 18:01
 
Fecha de Ingreso: abril-2009
Mensajes: 52
Antigüedad: 15 años
Puntos: 0
Problemas con la creacion de formulario en drupal 6.2

Buenas a todos,
Estoy intentando crear un formulario en mi módulo personalizado siguiendo los pasos del tutorial pero no me funciona el "submit".

En el fichero tema.module creo una funcion que es tema.formulario() donde estan definidos los campo y el submit

$form['submit'] = array(
'#type' => 'submit',
'#name' => 'submit',
'#value' => t('Enviar'),

);
$form['#submit'][] = 'tema_submit';
return drupal_render($form);

En tema_submit esta una traza solo para ver que ejecuta bien la funcion, pero no me funciona.
Hay algunos ejemplos que devuelven en tema.formulario() "return $form" y definen tema.page() que devuelve drupal.get.form() pero tampoco me funciona, no sé si es por la version de drupal que estoy utilizando o tengo que configurar algo mas ¿alguien sabe como solucionarlo?. Lo que quiero conseguir es crear un formulario que envie datos a una Base de datos.
Gracias por vuestra ayuda.
  #2 (permalink)  
Antiguo 14/05/2011, 19:59
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 18 años, 5 meses
Puntos: 890
Respuesta: Problemas con la creacion de formulario en drupal 6.2

Podrias poner el codigo completo de tu tema.module

Adelantando:

Cuando creas una funcion para crear/modificar un formulario debe ser llamado de algun lado, ya sea de un hook form alter o de un hook menu.

tema.module
Código PHP:
Ver original
  1. /* suponiendo que lo estas llamando de un hook menu */
  2.  
  3. function tema_formulario()
  4.  
  5. $form['nombre'] = array(
  6. ......
  7. );
  8.  
  9. $form['submit'] = array(
  10.  '#type' => 'submit',
  11.  '#name' => 'submit',
  12.  '#value' => t('Enviar'),
  13.  
  14.  );
  15.  
  16. return $form;
  17.  
  18. /* si quieres procesar la info tenes los otros hooks */
  19.  
  20. function tema_formulario_validate(&$form, &$form_state){
  21.  
  22. //reglas de validacion
  23.  
  24. }
  25.  
  26. /* si quieres procesar el formulario */
  27.  
  28. function tema_formulario_submit(&form, &form_state){
  29.  
  30. $nombre = $form_state['values']['nombre'];
  31. drupal_set_message(t('tu nombre es %s', array('%nombre' => $nombre)));
  32.  
  33. }
__________________
Drupal Argentina
  #3 (permalink)  
Antiguo 15/05/2011, 11:30
 
Fecha de Ingreso: abril-2009
Mensajes: 52
Antigüedad: 15 años
Puntos: 0
Respuesta: Problemas con la creacion de formulario en drupal 6.2

Ese es mi test.module:

function test_menu() {
$items[$path.formulario] = array(
'title' => 'formulario',
'page callback' => 'drupal_get_form',
//'page callback' => 'test_formulario',
'access callback' => TRUE,
'access arguments' => array('content type'),
'type' => MENU_CALLBACK,
);
return $items;
}



/**
* Crear el formulario
*/
function test_formulario ()
{

$form = array();
$form['test'] [ 'upload' ] = array(
'#type' => 'file' ,
'#title' => t ( 'Adjuntar Test' ),
'#size' => 40,
'#required' => TRUE,
'#weight' => -5,
'#default_value' => $rep->test,
);
$form['submit'] = array(
'#type' => 'submit',
'#name' => 'submit',
'#value' => t('Enviar'),
//'#submit' => array('test_formulario_submit'),
// '#action' => url('test_formulario_submit'),
);
$form['#submit'][] = 'test_formulario_submit';
// return drupal_render($form);
return $form;
}

function deliver_and_test_page(){
return drupal_get_form('test_formulario');
}
function test_formulario_submit ( $form, $form_state )
{

$nombre = $form_state['nombre'];
echo($nombre);
drupal_set_message ( t ( "Submit formulario" ) )

}

Me aparece una pantalla en blanco con un texto que pone "Array" que representa el objeto form. He hecho varias pruebas y no me funciona ninguna :S.

Gracias por la ayuda
  #4 (permalink)  
Antiguo 15/05/2011, 16:10
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 18 años, 5 meses
Puntos: 890
Respuesta: Problemas con la creacion de formulario en drupal 6.2

Por lo poco que entiendo de tu formulario es que quiere enviar un archivo, si es asi, mira la forma en como se hace. (En el ejemplo que te pase hay dos errores, que aca abajo estan corregidos)


Código PHP:
Ver original
  1. function test_menu() {
  2.  
  3. $items['uploadfile'] = array(
  4.  
  5.  'title' => 'Form upload test',
  6.     'page callback' => 'miform_page', //llamas a la pagina
  7.     'page arguments' => '',
  8.     'access callback' => TRUE, //permisos
  9.     'type' => MENU_NORMAL_ITEM, //se muestra como un item del menu
  10. );
  11.  
  12.  return $items;
  13.  
  14.  }
  15.  
  16. // llamamos a la pagina donde se mostrara en este caso el formulario, pero puede ser cualquier otra cosa, ejemplo texto, consultas, etc etc.
  17.  
  18.  
  19. function miform_page(){
  20.  
  21.     return drupal_get_form('_miform_upload');
  22.    
  23.     }
  24.  
  25. function _miform_upload(){
  26.  
  27.   $form['#attributes']['enctype'] = 'multipart/form-data';
  28.  
  29.   $form['nombre'] = array(
  30.   '#type' => 'textfield',
  31.   '#title' => 'Nombre del archivo'
  32.   );
  33.  
  34.  
  35.  $form['mifile'] = array(
  36.   '#type' => 'file',
  37.   '#title' => 'El archivo a subir'
  38.   );
  39.    
  40.  
  41.   $form['submit'] = array(
  42.   '#type' => 'submit',
  43.   '#value' => 'Sumbit'
  44.   );
  45.   return $form;
  46.    
  47.     }
  48.    
  49. function _miform_upload_validate(){
  50.  
  51. // tus reglas de validacion
  52.     ...............................
  53.     }
  54.    
  55.  
  56. function _miform_upload_submit(&$form, &$form_state){
  57.  
  58.  $validators = array(); //reglas de validacion para un upload
  59.  
  60. $destino = '/var/htdocs/misarchivos'; //esta es la ruta absoluta donde se guardara(debe tener permisos de escritura)
  61.  
  62.  $file = file_save_upload('mifile', $validators, $destino);
  63.  
  64.   if($file){
  65.      
  66.       drupal_set_message('Subido con exito!');
  67.      
  68.       }
  69.    
  70. else{
  71. .............
  72. }
  73.     }

Obviamente debes borrar la cache cada vez que haces cambios en el hook menu.
Saludos.
__________________
Drupal Argentina

Última edición por NUCKLEAR; 15/05/2011 a las 16:16
  #5 (permalink)  
Antiguo 19/05/2011, 15:27
 
Fecha de Ingreso: abril-2009
Mensajes: 52
Antigüedad: 15 años
Puntos: 0
Respuesta: Problemas con la creacion de formulario en drupal 6.2

siguiento tus pasos me muestra ese warning :
warning: move_uploaded_file() [function.move-uploaded-file]: Filename cannot be empty in C:\

Cuando se ejecuta $file = file_save_upload('mifile', $validators, $destino); mifiel es cadena vacia :S.

por lo tanto se impide que se guarde en la carpeta indicada.Miré otros ejemplos en internet y todos muestran el mismo codigo que tu :(

¿hay alguna otra forma de obtener el valur introducido en el campo del formulario?
  #6 (permalink)  
Antiguo 19/05/2011, 16:06
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 18 años, 5 meses
Puntos: 890
Respuesta: Problemas con la creacion de formulario en drupal 6.2

Pon el codigo completo del modulo que has hecho
__________________
Drupal Argentina
  #7 (permalink)  
Antiguo 20/05/2011, 00:51
 
Fecha de Ingreso: abril-2009
Mensajes: 52
Antigüedad: 15 años
Puntos: 0
Respuesta: Problemas con la creacion de formulario en drupal 6.2

aqui tienes el codigo, es el mismo que mandaste lo queria probar ¿no habia que poner test_miform_page() y test_miform_upload en vez de miform_page() y miform_upload ? acabo de caer en ello y no puedo hacer la prueba porque estoy fuera, en cuanto pueda lo probaré pero me gustaria saber cuando tengo que poner el nombre de mi modulo antes del hook y cuando no hace falta ponerlo.
Muchas gracias.

Código PHP:
Ver original
  1. <?php
  2.  
  3. /**EJEMPLO*/
  4. function test_menu() {
  5.  
  6.       $items['uploadfile'] = array(
  7.           'title' => 'Form upload test',  
  8.           'page callback' => 'miform_page', //llamas a la pagina
  9.           'page arguments' => '',
  10.           'access callback' => TRUE, //permisos
  11.           'type' => MENU_NORMAL_ITEM, //se muestra como un item del menu
  12.  
  13.       );
  14.  
  15.        return $items;
  16.  
  17.        }
  18.  
  19.       // llamamos a la pagina donde se mostrara en este caso el formulario, pero puede ser cualquier otra cosa, ejemplo texto, consultas, etc etc.
  20.  
  21. function miform_page(){
  22.  
  23.           return drupal_get_form('miform_upload');
  24.  
  25.     }
  26.  
  27. function miform_upload(){
  28.  
  29.         $form['#attributes']['enctype'] = 'multipart/form-data';
  30.  
  31.         $form['nombre'] = array(
  32.  
  33.         '#type' => 'textfield',
  34.  
  35.         '#title' => 'Nombre del archivo'
  36.  
  37.         );
  38.  
  39.        $form['mifile'] = array(
  40.  
  41.         '#type' => 'file',
  42.  
  43.         '#title' => 'El archivo a subir'
  44.  
  45.         );
  46.  
  47.         $form['submit'] = array(
  48.  
  49.         '#type' => 'submit',
  50.  
  51.         '#value' => 'Sumbit'
  52.  
  53.         );
  54.  
  55.         return $form;
  56.  
  57.           }
  58.  
  59.  
  60. function miform_upload_submit(&$form, &$form_state){
  61.  
  62.        $validators = array(); //reglas de validacion para un upload
  63.  
  64.        $destino = 'c:\p'; //esta es la ruta absoluta donde se guardara(debe tener permisos de escritura)
  65.  
  66.        
  67.        $file = file_save_upload('mifile', $validators, $destino);
  68.        file_set_status($file, FILE_STATUS_PERMANENT);
  69.  
  70.         if($file){
  71.  
  72.             drupal_set_message('Subido con exito!');
  73.  
  74.         }
  75.       else{
  76.               drupal_set_message('Error en subir el fichero!');
  77.         }
  78.  
  79.       }

Etiquetas: formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:16.