formulario form custom create php drupal-7 drupal-modules drupal-fapi drupal-forms

php - custom - form elements drupal 8



Drupal 7 FAPI- Agregar elementos de formulario en validar o enviar controladores (2)

¿Es posible agregar elementos de formulario adicionales en las funciones de validar o enviar en el módulo drupal 7? El siguiente código funciona y la imagen se muestra en el formulario:

function test1_form($form, &$form_state) { $form[''image'']=array( ''#markup''=>''<img src="sites/all/modules/create_ad/th.jpeg"><br/>'', //replace with your own image path ); $form[''submit''] = array( ''#type'' => ''submit'', ''#value'' => ''Submit'', ); }

pero cuando trato de mostrar la imagen después del envío en la función de envío como sigue, no funciona:

function test1_form($form, &$form_state) { $form[''submit''] = array( ''#type'' => ''submit'', ''#value'' => ''Submit'', ); } function test1_form_submit($form,&$form_state) { $form[''image'']=array( ''#markup''=>''<img src="sites/all/modules/create_ad/th.jpeg"><br/>'', //replace with your own image path ); }

Cualquier ayuda positiva es bienvenida. Gracias.


Aquí hay otra forma de hacer esto con Ajax. De esta forma no obtendrás ninguna recarga de página, ya que solo la imagen se cargará en el div con id de envoltura.

Aquí está el código:

function test_menu() { $items = array(); $items[''test''] = array( ''title'' => ''test'', ''page callback'' => ''drupal_get_form'', ''page arguments'' => array(''test1_form''), ''access callback'' => array(TRUE), ''type'' => MENU_CALLBACK, ); return $items; } function test1_form($form, &$form_state) { $form[''submit''] = array( ''#type'' => ''button'', ''#value'' => t(''Submit''), ''#name'' => ''add'', ''#ajax'' => array( ''callback'' => ''ajax_load_picture_callback'', ''wrapper'' => ''wrapper'', ''method'' => ''replace'', ''effect'' => ''fade'', ), ); $form[''image''] = array( ''#markup'' => '''', ''#prefix'' => ''<div id="wrapper">'', ''#suffix'' => ''</div>'', ); if (array_key_exists(''triggering_element'', $form_state) && array_key_exists(''#name'', $form_state[''triggering_element'']) && $form_state[''triggering_element''][''#name''] == ''add'') { $form[''image''][''#markup''] =''<img src="themes/bartik/logo.png"><br/>''; //replace with your own image path } return $form; } function ajax_load_picture_callback($form, $form_state) { return $form[''image'']; } function test1_form_submit($form, &$form_state) { }


Puede seguir la metodología de formulario de varios pasos para agregar campos adicionales a su formulario después del envío.

Aquí hay una publicación de blog que habla sobre un enfoque para varios pasos y puede darle una idea.

Básicamente, en su función de envío, almacena sus valores y configura el formulario para ser reconstruido. Luego, en su función de formulario, verifica esos valores almacenados y agrega los nuevos campos, si están presentes.

Ejemplo:

<?php function test1_form($form, &$form_state) { if (isset($form_state[''storage''][''show-image''])){ $form[''image'']=array( ''#markup''=>''<img src="sites/all/modules/create_ad/th.jpeg"><br/>'', //replace with your own image path ); } $form[''submit''] = array( ''#type'' => ''submit'', ''#value'' => ''Submit'', ); } function test1_form_submit($form,&$form_state) { $form_state[''rebuild''] = TRUE; $form_state[''storage''][''show-image''] = true; }