2012-10-12 10 views
5

のように、私たちのカスタムフォームでCCKフィールドを取り付けるためのDrupalの6のCCKを持つメソッドがありました:私は、Drupalの7で同じ機能を実現するにはどうすればよいのDrupalでカスタムフォームにCCKフィールドを追加します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); 

は、 ?私はフォームを持っていて、コンテンツタイプのために作成したフィールドを使いたいと思っています。 field.moduleのすべてのファイルを調べたところ、何も見つかりませんでした。 _attach_field,field_info_Fieldfield_info_instanceのような機能がありますが、フォームフィールドとしてレンダリングすることはできません。

+1

これは可能ですが、かなり面倒です。コード例はこちら[here](http://drupal.stackexchange.com/questions/25140/is-displaying-a-working-field-widget-form-on-its-own-possible) – Clive

答えて

2

私はフォーム全体を追加して設定を解除するというあなたのソリューションが好きです。私はそれを別の角度から攻撃しています。一時的な手書きの書式を作成し、保存したいフィールドだけをコピーします。私がhttp://api.drupal.org/api/drupal/modules%21field%21field.attach.inc/function/field_attach_form/7#comment-45908に投稿したもの:

任意のエンティティバンドル(この場合、オートコンプリートノードリファレンスのテキストフィールド)から1つのフィールドを別のフォームに追加するには、一時フォームとフォームステートとしてフォームを作成し、そのフィールド定義。私の場合、私は、コマースチェックアウトフォームが変更に取り組んでいます:

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

    .. 

利点を解決可能性が高いフォーム - と「ソース」フォーム(複雑すぎる手段設定解除を多くの複雑さに依存してどちらかにinsertメソッド)と、ソースフォームが時間の経過とともに新しいフィールドを受け取るかどうか(新しいフィールドは、form-insertメソッドの "destination"フォームに表示されます)。

解決策をお寄せいただきありがとうございます。

+0

ありがとうございます本当に役立つ! – miteshmap

+0

@texasbroniusカスタムフォームにユーザーフィールドを添付することはできますか?ここには、[form.inc](https://www.dropbox.com/s/o1gf5j51n7jbo81/statuses.form.inc?dl=0)ファイルがあります – Umair

2

最後に答えを得ました。これを行うトリックはここにあります。

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

これは、フィールドapiで追加されたすべてのカスタムフィールドを表示します。フォームに表示したくない余分なフィールドの設定を解除する必要があります。残りはITと同じです。

関連する問題