カスタム モジュールでは、特定のコンテンツ タイプの追加フォームを表示する hook_menu でページを定義し、フォームにいくつかの変更を加えたいと考えています。
これまでのところ、機能しており、新しいノードを保存していますが、コードで設定しているデフォルト値のみを使用しています。つまり、ユーザーがフォームに入力したものは何も取得されていません。$form_state['input']
入力された値をチェックして含めましたが、含まれて$form_state['values']
いないため、新しいノードが間違って保存されます。
関連するコードは次のとおりです。
function mymodule_menu() {
return array(
'admin/content/myadd/%' => array(
'title' => 'my custom add page',
'page callback' => 'mymodule_node_add',
'page arguments' => array(3),
'access callback' => TRUE,
'type' => MENU_CALLBACK,
),
);
}
function mymodule_node_add() {
module_load_include('inc', 'node', 'node.pages');
//I'm doing a print here instead of returning because I'm calling this page
//in an AJAX popup, so I don't want the whole page to output, only the form.
print render(drupal_get_form('mymodule_node_add_form'));
}
function mymodule_node_add_form($form, &$form_state) {
if (!isset($form_state['node']) {
global $user;
$node = (object) array(
'uid' => $user->uid,
'type' => 'mycontenttype',
'language' => LANGUAGE_NONE,
);
//this is setting a default value
$node->myfield = array(LANGUAGE_NONE => array(array('value' => arg(3))));
$form_state['build_info']['args'] = array($node);
$form = drupal_build_form('mycontenttype_node_form', $form_state);
$form['actions']['submit']['#submit'][0] = 'mymodule_node_add_form_submit';
//there's a lot more customization of the form here, like adding fields, etc.
}
return $form;
}
function mymodule_node_add_form_submit($form, &$form_state) {
//here's where $form_state['input'] is correct but $form_state['values'] isn't.
$node = node_form_submit_build_node($form, $form_state);
node_save($node);
$form_state['values']['nid'] = $node->nid;
$form_state['nid'] = $node->nid;
$form_state['redirect'] = 'some/other/page';
}
それで、私はここで何か間違ったことをしていますか?フォーム ID が間違っていることを心配する必要がありますか? (私のフォームの ID はmymodule_node_add_form
ですが、実際のフォームは を出力する可能性がありますmycontenttype_node_form
)、これは私に影響しますか?