web-dev-qa-db-ja.com

drupal 7にデフォルト値を含むノードフォームを埋め込む

ノードフォームを埋め込み、そのフォームのデフォルト値をDrupal 7に設定するにはどうすればよいですか?

私はこれを使用できることを理解しています:

 $form = node_add('product_plan');
 print drupal_render($form);

これでフォームがページに正しく印刷されますが、デフォルト値を追加する方法を理解するための助けが必要です。 Drupal 6で、私は通常これを行います:

 function module_nodetype_form_embed( $property )
 {
     global $user;

    $node = new stdClass();
    $node->type = 'node_type';
    $node->uid = $user->uid;

    // Hidden through form alter
    $node->field_node_reference[0]['nid'] = $property->nid; 
    node_object_prepare( $node );

    return drupal_get_form( 'node_type_node_form', $node );

 }

では、どのようにしてDrupal 7

2
revolt

私はそれをD7でこれで動作させるようにしました:

カスタムモジュールで次の関数を記述します。

function module_nodetype_form_embed( $property )
 {
 global $user;

$node = new stdClass();
$node->type = 'node_type';
$node->uid = $user->uid;
$node->name = (isset($user->name) ? $user->name : '');
// Hidden through form alter
$node->field_node_reference['und'][0]['target_id'] = $property->nid; 
node_object_prepare( $node );

return drupal_get_form( 'node_type_node_form', $node );

 }

このフォームをノードテンプレートに埋め込む場合は、次のようにします。

/* I'm assuming that your $property argument from the function
   is the $node page that you are embedding into. */

$form = module_nodetype_form_embed($node);
print drupal_render($form);

私が遭遇している唯一の問題は、ユーザーがフォームに正しく入力しなかった場合、検証エラーが最初の送信時に表示されないことです...しかし、無効な値を複数回送信して送信すると、エラーメッセージが表示されます。おかしい….

1
user2014

ノード参照に「選択リスト」ウィジェットを使用している場合、これを行うことができます:

$form = node_add('product_plan');
$form['FIELD_NAME'][$form['language']['#value']]['#value'] = 'NID';
return drupal_render($form);

「オートコンプリート」ウィジェットは次のようになります。

$form = node_add('product_plan');
$element['#default_value'] = 'NID';
$form['FIELD_NAME'][$form['language']['#value']][0]['nid']['#value'] = node_reference_autocomplete_value($element, FALSE, '');
return drupal_render($form);
1
acouch