2012-10-12 8 views
5

C'era un metodo con CCK in Drupal 6 per attaccare un campo CCK nel nostro modulo personalizzato, come:campo CCK Aggiungere al modulo personalizzato in 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); 

Come posso ottenere la stessa funzionalità in Drupal 7 ? Avevo un modulo e voglio usare il campo che ho creato per un tipo di contenuto. Ho esaminato tutti i file di field.module ma non ho trovato nulla. Ci sono funzioni come _attach_field, field_info_Field e field_info_instance, ma non possono essere visualizzati come campo modulo.

+1

È _possibile_ ma piuttosto disordinato. Puoi trovare un esempio di codice [qui] (http://drupal.stackexchange.com/questions/25140/is-displaying-a-working-field-widget-form-on-its-own-possible) – Clive

risposta

2

Mi piace la tua soluzione di aggiungere l'intero modulo e disinserimento. Lo sto attaccando da un'altra angolazione: crea una forma temporanea da buttare e copia solo nei campi che desideri conservare. Ecco cosa ho postato su http://api.drupal.org/api/drupal/modules%21field%21field.attach.inc/function/field_attach_form/7#comment-45908:

Per aggiungere un singolo campo da un bundle di entità arbitrario (in questo caso, un campo di testo di nodereference con completamento automatico) su un altro modulo, creare il modulo come modulo temporaneo e formstate e copiare in posizione quella definizione del campo. Nel mio caso, sto lavorando su un modulo di checkout Commercio Alter:

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']; 

    .. 

Il vantaggio di entrambe le soluzioni probabili dipende dalla complessità della "sorgente" modulo (troppo complesso significa un sacco di disinserisce con l'form- inserire metodo) e se il modulo di origine riceverà mai nuovi campi nel tempo (nuovi campi verranno visualizzati nel modulo "destinazione" nel metodo di inserimento modulo).

Grazie per aver condiviso la tua soluzione!

+0

Grazie davvero utile !! – miteshmap

+0

@texasbronius Puoi aiutarmi ad allegare un campo utente al mio modulo personalizzato? Ecco il file [form.inc] (https://www.dropbox.com/s/o1gf5j51n7jbo81/statuses.form.inc?dl=0) – Umair

2

Alla fine ha ottenuto la risposta. Ecco il trucco per farlo.

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

questo visualizzerà tutti i campi personalizzati che vengono aggiunti con campo api. quindi è necessario rimuovere tutti i campi aggiuntivi che non si desidera visualizzare nel modulo. il riposo sarà come l'IT.