2012-10-12 83 views
5

Hubo un método con CCK en Drupal 6 para fijar un campo CCK en nuestro formulario personalizado, como:Agregar campo CCK al formulario personalizado en Drupal 7

$field = content_fields('field_name'); // field_name is cck field 
(text_field,text_Area,image_field anything.) 
$form['#field_info'][$name] = $field; 
$form += content_field_form($form, $form_state, $field); 

¿Cómo puedo conseguir la misma funcionalidad en Drupal 7 ? Tenía un formulario y quiero usar el campo que creé para un tipo de contenido. Revisé todos los archivos de field.module pero no pude encontrar nada. Hay funciones en él como _attach_field, field_info_Field y field_info_instance, pero no se pueden representar como un campo de formulario.

+1

Es _posible_ pero bastante desordenado. Puede encontrar un ejemplo de código [aquí] (http://drupal.stackexchange.com/questions/25140/is-displaying-a-working-field-widget-form-on-its-own-possible) – Clive

Respuesta

2

Me gusta su solución de agregar todo el formulario y desarmarlo. Lo estoy atacando desde otro ángulo: crea una forma temporal desechable y copia solo los campos que deseas conservar. Esto es lo que publiqué en http://api.drupal.org/api/drupal/modules%21field%21field.attach.inc/function/field_attach_form/7#comment-45908:

Para agregar un único campo de un paquete de entidades arbitrarias (en este caso, un campo de texto de autorización automática) a otro formulario, cree el formulario como formulario temporal y formstate y cópielo para colocarlo esa definición de campo. En mi caso, estoy trabajando en una forma de pago Comercio altero:

function example_form_commerce_checkout_form_checkout_alter(&$form, &$form_state, $form_id) { 
    $tmpform = array(); 
    $tmpform_state = array(); 
    $tmpnode = new stdClass(); 
    $tmpnode->type = 'card'; 
    // Create the temporary form/state by reference 
    field_attach_form('node', $tmpnode, $tmpform, $tmpform_state); 
    // Create a new fieldset on the Commerce checkout form 
    $form['cart_contents']['org_ref_wrap'] = array(
    '#type' => 'fieldset', 
    '#title' => t('Support Organization'), 
); 
    // Place a copy of the new form field within the new fieldset 
    $form['cart_contents']['org_ref_wrap'][] = $tmpform['field_card_organization']; 
    // Copy over the $form_state field element as well to avoid Undefined index notices 
    $form_state['field']['field_card_organization'] = $tmpform_state['field']['field_card_organization']; 

    .. 

La ventaja de cualquiera de las soluciones probablemente depende de la complejidad de la "fuente" forma (demasiado complejo significa un montón de desarma con la forma- método de inserción) y si el formulario de origen recibirá nuevos campos a lo largo del tiempo (los nuevos campos aparecerán en su formulario de "destino" en el método de inserción de formularios).

Gracias por compartir su solución!

+0

Gracias, esto es ¡¡de mucha ayuda!! – miteshmap

+0

@texasbronius ¿Me pueden ayudar a adjuntar un campo de usuario a mi formulario personalizado? Aquí está el archivo [form.inc] (https://www.dropbox.com/s/o1gf5j51n7jbo81/statuses.form.inc?dl=0) – Umair

2

Por fin ha recibido la respuesta. Aquí está el truco para hacer esto.

$node = new stdClass(); 
$node->type = 'video'; //content type 
field_attach_form('node', $node, $form, $form_state); 
unset($form['body']); //unset other fields like this. 

Esto mostrará todos los campos personalizados que se agregan con el campo api. por lo que debe deshacer los campos adicionales que no desee mostrar en su formulario. el resto será como es.

Cuestiones relacionadas