2015-07-03 5 views
0

Первоначально я не использую кнопку cancel в своем moodle form. Моя форма выглядит следующим образом:Кнопка отмены отправки данных формы в Moodle

require_once("{$CFG->libdir}/formslib.php"); 

class quest_form extends moodleform { 

    function definition() { 
     global $DB; 
     $mform =&$this->_form; 

     $mform->addElement('header','displayinfo', 'Add Question'); 

     // add question. 
     $mform->addElement('editor', 'title', 'Question'); 
     $mform->addRule('title', null, 'required', null, 'client'); 
     $mform->setType('title', PARAM_RAW); 
     // add answer. 
     $mform->addElement('editor', 'answer', 'Answer'); 
     $mform->addRule('answer', null, 'required', null, 'client'); 
     $mform->setType('answer', PARAM_RAW); 

     $mform->addElement('hidden', 'blockid'); 
     $mform->setType('blockid', PARAM_RAW); 
     $mform->addElement('hidden', 'courseid'); 
     $mform->setType('courseid', PARAM_RAW); 
     $this->add_action_buttons(false, 'submit'); 
    } 

Теперь я хочу использовать cancel кнопку в моей форме, поэтому я заменить строку

$this->add_action_buttons(false, 'submit'); 

с

$this->add_action_buttons(true, 'submit'); 

Кнопка cancel отображается успешно, но пока нажав кнопку cancelthe form gets submitted (даже если в полях формы нет данных).

Как я могу это решить? Я пропустил что-нибудь еще?

Пожалуйста, помогите мне ...

EDIT

В зависимости от Рассел Англии ответ. Я стараюсь, как показано ниже:

$qform = new quest_form(); 
    if ($qform ->is_cancelled()){ 
     redirect("view.php?id={$cid}"); 
    }else{ 
     $qform = new pool_form("pool_action.php?id={$cid}&qpid={$questplace->id}&qtype={$qtype}"); 
    } 
    $qform ->display(); 

Но все-таки cancel button отправить форму.

ответ

0

Вам нужно проверить, была ли форма отменена в вызывающем php-файле. например:

$form = new quest_form(); 

if ($form->is_cancelled()) { 
    // Display a message or redirect somewhere. 
    redirect(new moodle_url('/foldername/cancelquesturl.php')); 
} else if ($data = $form->get_data()) { 
    // Do something with the data. 
} 
+0

Я отредактировал свой вопрос, попробовав свой ответ. пожалуйста, посмотрите мою отредактированную часть. – next2u

+0

Вам нужно получить данные из формы после '} else if ($ data = $ form-> get_data()) {' eg '$ courseid = $ data-> courseid' - также избегать используя 'PARAM_RAW', используйте самый близкий тип параметра, например' PARAM_INT' для курса. –

Смежные вопросы