2012-10-12 18 views
5

Es war ein Verfahren mit CCK in Drupal 6 ein CCK Feld in unserer eigenen Form zu befestigen, wie:hinzufügen CCK Feld benutzerdefiniertes Formular 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); 

Wie kann ich die gleiche Funktionalität in Drupal 7 erreichen ? Ich hatte ein Formular und möchte das Feld verwenden, das ich für einen Inhaltstyp erstellt habe. Ich ging durch alle Dateien von field.module, konnte aber nichts finden. Es gibt Funktionen wie _attach_field, field_info_Field und field_info_instance, aber sie können nicht als ein Formularfeld gerendert werden.

+1

Es ist möglich, aber ziemlich chaotisch. Sie können ein Codebeispiel [hier] finden (http://drupal.stackexchange.com/questions/25140/is-displaying-a-working-field-widget-form-on-it-its-own-possible) – Clive

Antwort

2

Ich mag Ihre Lösung des Hinzufügens der gesamten Form und Unscharfschaltung. Ich greife es aus einem anderen Blickwinkel an - erstelle ein wegwerfbares temporäres Formular und kopiere nur die Felder, die du behalten willst. Hier ist, was ich bei http://api.drupal.org/api/drupal/modules%21field%21field.attach.inc/function/field_attach_form/7#comment-45908 posted:

Um ein einzelnes Feld eine beliebige Einheit Bündel (in diesem Fall eine der automatischen Vervollständigung Nodereference Textfeld) auf eine andere Form hinzufügen aus, erstellen Sie das Formular als eine temporäre Form und Formstate, und kopieren Sie in zu Ort diese Felddefinition. In meinem Fall, ich arbeite in einem Formular Commerce Kasse ändern:

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

    .. 

Der Vorteil wahrscheinlich entweder Lösung auf der Komplexität der „Quelle“ Form (zu komplex bedeutet eine Menge ständig entsticht mit dem form- hängt Insert-Methode) und ob das Quellformular im Laufe der Zeit immer neue Felder erhalten wird (neue Felder erscheinen in Ihrem "Ziel" -Formular in der Formular-Einfügemethode).

Vielen Dank für Ihre Lösung!

+0

Danke das ist wirklich hilfreich!! – miteshmap

+0

@texasbronius Können Sie mir helfen, ein Benutzerfeld an mein benutzerdefiniertes Formular anzuhängen? Hier ist die [form.inc] (https://www.dropbox.com/s/o1gf5j51n7jbo81/statuses.form.inc?dl=0) Datei – Umair

2

Endlich die Antwort bekommen. Hier ist der Trick, dies zu tun.

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

Dies zeigt alle benutzerdefinierten Felder an, die mit Feld-API hinzugefügt werden. Sie müssen also alle zusätzlichen Felder aufheben, die nicht in Ihrem Formular angezeigt werden sollen. Ruhe wird sein wie es ist.

Verwandte Themen