Изменить значение поля и отправить узел с помощью пользовательской кнопки - PullRequest
0 голосов
/ 22 декабря 2018

Я пытаюсь написать модуль, который добавляет кнопку к типу узла, который при нажатии изменяет значение поля в этом узле и отправляет изменения.Кажется, что все работает, так как кнопка отображается правильно, и узел отправляется при нажатии, но значение поля остается неизменным.Я чувствую, что упускаю что-то очевидное.

<?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?

1 Ответ

0 голосов
/ 17 января 2019

Я предполагаю, что вы пишете этот код в пользовательском модуле с именем 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
}
...