Como crear un custom form basado en un Entity en Drupal 7

Author Top
enzo

Anteriormente hemos publicado algunos artículos relacionados con los Entity o Entidades en Drupal como son:

http://www.7sabores.com/blog/detectar-si-un-bundle-entity-usa-fieldgroup-drupal-7
http://www.7sabores.com/blog/crear-un-usuario-usando-entity-api-y-profile2-drupal-7
http://www.7sabores.com/blog/obtener-los-fields-un-entity-drupal-7
http://www.7sabores.com/blog/definir-un-valor-defecto-un-entity-reference-drupal-7

Hoy vengo a compartirles como crear un formulario dinámico basado en composición de un entity.

1. Creación del Formulario

Para crear el formulario primero debemos cargar la entidad e identificar los campos con que cuenta la entidad como se muestra a continuación.

// Get bundle type
$bundle = 'imagen';

$form_state['entity_id'] = "7"; 
$form['#submit'] = array('MYMODULE_process_extra_fields'),
  
// Generate dynamic form fields
$form['extra_fields'] = array(
  '#type' => 'fieldset',
  '#title' => t('Bulk extra fields'),
  '#weight' => 5,
  '#collapsible' => FALSE,
  '#collapsed' => FALSE,
);

//Get fields fro entity file bundle photo
$fields = field_info_instances('file', $bundle);
foreach($fields as $field_id => $field) {
  $form['extra_fields'][$field_id] = array(
    '#type' => 'textfield',
    '#title' => t($field['label']),
    '#size' => 60,
    '#maxlength' => 128,
    '#required' => FALSE,
  );
}

En el código anterior para el Entity File de bundle image obtenemos los fields y creamos elementos de FAPI tipo textfield, la cantidad y los nombres dependerán de los fields agregados al bundle y se define una función para procesar los datos ingresados por el usuario.

Lo anterior generaría un formulario similar a la siguiente imagen:

2. Procesar el formulario.

Para finalizar solo debemos implementar la función que tomara los datos del usuario y lo almacenara en la entidad deseada.

function MYMODULE_process_extra_fields($form, &$form_state) {
	// Get bundle type
	// Get bundle type
	$bundle = 'image';
	
	$fields = field_info_instances('file', $bundle);
	$entities = entity_load('file', array($form_state['entity_id']));
	$entity_file = array_values($entities)[0];
	
	foreach($fields as $field_id => $field) {
	  $entity_file->$field_id = array(LANGUAGE_NONE => array(0 => array('value' => $form_state['values'][$field_id])));
	}
	
	entity_save('file',$entity_file);
}

Espero que haya sido de su agrado.

bursa esc
bursa eskort
bursa escort bayan bursa travesti escort bursa merkez escort bursaescort bursa escort bayanlar alanya eskort bayan antalya bayan eskort havalimanı transfer