ノードフォームを埋め込み、そのフォームのデフォルト値を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
私はそれを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);
私が遭遇している唯一の問題は、ユーザーがフォームに正しく入力しなかった場合、検証エラーが最初の送信時に表示されないことです...しかし、無効な値を複数回送信して送信すると、エラーメッセージが表示されます。おかしい….
ノード参照に「選択リスト」ウィジェットを使用している場合、これを行うことができます:
$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);