我正在尝试编写一个向节点类型添加按钮的模块,该模块在被按下时将更改该节点中字段的值并提交更改。一切似乎都正常,因为按钮正确显示,并且节点在按下时提交,但是该字段的值保持不变。我觉得我缺少明显的东西。
<?php
function iu_buttons_node_view($node, $view_mode, $langcode) {
if ($node->type == 'billing_entry') {
if ($node->field_status['und'][0]['value'] == 'open') {
$form = drupal_get_form('submit_button_form');
$node->content['submit_button'] = $form;
}
}
}
function submit_button_form($form, &$form_submit) {
$form['submit'] = array(
'#type' => 'button',
'#value' => ('Submit'),
'#submit' => array('submit_button_form_submit'),
);
return $form;
}
function submit_button_form_submit($form, &$form_state) {
$node->field_status['und'][0]['value']['#value'] = 'submitted';
}
可能值得注意的是,我要更改的字段是一个选择列表。我应该使用与hook_form_submit不同的功能吗?
答案 0 :(得分:0)
我假设您是在名为 iu_buttons 的自定义模块中编写此代码的,并且您希望在节点页面中而不是在节点编辑表单中显示此按钮。
在这种情况下,问题在于您从未在提交功能中保存该节点。这是提交功能的一个版本,它将保存该节点。
function submit_button_form_submit($form, &$form_state) {
$node = menu_get_object(); //get the current node
$node->field_status['und'][0]['value']['#value'] = 'submitted';
node_save($node); // save the changed node
}
我认为您可能只想保存字段,而不需要保存整个节点。在这种情况下,您可以使用以下内容:
function submit_button_form_submit($form, &$form_state){
$node = new stdClass(); // Create empty object
$node->nid = intval(args(1)); // Include the nid so that Drupal saves the new value to the correct node
$node->field_status['und'][0]['value']['#value'] = 'submitted';
field_attach_update('node', $node); // Save the field
}