如何在 moodle 中获取 selected 的 select 形式的项目

How can get selected items of select form in moodle

我有两个 php 页面。第一个是 chart1.php。在此页面中,我创建了一个在 chartreport_getitems_form.php 中定义的 getitems_form 表单对象,并处理从该表单提交的值。这段代码是这样的:

<?php
require('../../config.php');
require_once('chartreport_getitems_form.php');
.
.
$getvariables=new getvariables;
if (!isset($getvariables->avalue)) {
  $getvariables->svalue=array();
  $getvariables->avalue=$coursegroups['name'];
  $getvariables->id=$id;
}
//create form
$mform = new getitems_form(null,$getvariables);

//Form processing and displaying is done here
if ($mform->is_cancelled()) { 
...
} else if ($fromform = $mform->get_data()) {

     if(!empty($fromform ->submitbutton)){

       echo "!!!!!!!","<pre>",var_dump($fromform ->Getfirstvalue),"</pre>";
       echo "******","<pre>",var_dump($fromform ->Setfirstvalue),"</pre>";

     }
     // reset the form selections
     $mform = new getitems_form(null,$getvariables);
} else { // first call
       if (!isset($getvariables->avalue)) {
           $getvariables->svalue=array();
           $getvariables->avalue=$coursegroups['name'];
           $getvariables->id=$id;
        }
}

//===========
echo $OUTPUT->header();
$mform->display();
echo $OUTPUT->footer();

在第二页,它的名字是 chartreport_getitems_form.php,我有两个多 select 表单,我用两个按钮 "add1" 和 "remove1" 来更改它们的选项 javascript 用于客户端进程。 在这段代码的末尾,我有一个提交按钮,用于将 for 的值发送到 chart1.php。 我向此按钮添加了一个 jquery 脚本,用于 select 这两个 select 中的所有选项,或者当此按钮 submit.this 工作时,我可以获得这些选项的价值chart1.php.

<?php
require_once("{$CFG->libdir}/formslib.php");
require_once('lib/JEasyUI.php');

class getitems_form extends moodleform {
//Add elements to form
public function definition() {
   global $PAGE, $CFG;
    $easy_ui=new JEasyUI();
    $block_name='chartreport';  
    $js_root="/report/{$block_name}/js/jquery-easyui";
    $PAGE->requires->js("/report/{$block_name}/js/jquery-2.1.4.min.js",true);

    $mform =& $this->_form;
    $a=& $this->_customdata;

    $avalue=$a->avalue;
    $svalue=$a->svalue;
    $courseid=$a->id;


    $mform->addElement('hidden', 'id',$courseid);
    $mform->setType('id', PARAM_INT);

    $mform->addElement('header', 'firstvalue', get_string('GetGroups','report_chartreport'));

    $objs1[0] =& $mform->createElement('select', 'Getfirstvalue', get_string('Groups','report_chartreport'),$avalue,'size="15"');
    $objs1[0]->setMultiple(true);

    $objs1[1] =& $mform->createElement('select', 'Setfirstvalue', get_string('selectedGroups','report_chartreport'),$svalue,'size="15"');
    $objs1[1]->setMultiple(true);


    $grp =& $mform->addElement('group', 'group1', get_string('Groups','report_chartreport'), $objs1, array(' ', '<br />'), false);
    $mform->addGroupRule('group1', array('value' => array(array(get_string('maximumchars', '', 255), 'maxlength', 255, 'client'))));

    //====
    $script="
    function test(){
        $('select[name*=\"Getfirstvalue\"]  option:selected').appendTo('select[name*=\"Setfirstvalue\"]');
        return false;
    }";
    $objs2 = array();
    $objs2[] =& $mform->createElement('submit', 'add1', get_string('add','report_chartreport'),
    ' onclick="test(); return false;"' );
    $mform->addElement('html', html_writer::tag('script', $script));


    $scriptremove="
    function removeitem(){
        $('select[name*=\"Setfirstvalue\"]  option:selected').appendTo('select[name*=\"Getfirstvalue\"]');
        return false;
    }";
    $objs2[] =& $mform->createElement('submit', 'remove1', get_string('remove','report_chartreport'),
    ' onclick="removeitem(); return false;"');
    $mform->addElement('html', html_writer::tag('script', $scriptremove));


    $grp =& $mform->addElement('group', 'buttonsgrp', get_string('selectedlist1','report_chartreport'), $objs2, array(' ', '<br />'), false);

    $renderer =& $mform->defaultRenderer();
    $template = '<label class="qflabel" style="vertical-align:top">{label}</label> {element}';
    $renderer->setGroupElementTemplate($template, 'group1');

    //--------------------- 
 $scriptbutton= '$(document).ready(function(){
                        $("#id_submitbutton").click(function(){
                            $(\'select[name*=\"Getfirstvalue\"]  option\').prop(\'selected\', true);
                        });

                        $("#id_submitbutton").click(function(){
                            $(\'select[name*=\"Setfirstvalue\"]  option\').prop(\'selected\', true);
                        });

                    });';

$mform->addElement('html', html_writer::tag('script', $scriptbutton));
    $this->add_action_buttons($cancel = true, $submitlabel=get_string('DrawChart','report_chartreport'));       
}

}

这两个不同select或者只是第一个有初始选项($avalue)但第二个($svalue)的初始选项为空。 当我提交按钮并且我想处理它们的价值时。我可以获得 select 的值或具有初始选项($avalue)的值,但对于另一个我看到错误:

Notice:  Undefined property: stdClass::$Setfirstvalue in C:\MoodleWindowsInstaller-latest\server\moodle\report\chartreport\Chart1.php on line 72
NULL

所以我的问题是,为什么我无法获得“$svalue”选项? 以及如何获得这些选项?

谢谢

您可以只获得初始选项中的选项。 你可以在 chart1.php 中这样做:

$getvariables->svalue=array_map(function($input) { return ''; }, $coursegroups['name']);

并在 chartreport_getitems_form.php 中写下:

$scriptdeleteinitialoptions='$(document).one(\'ready\', function () {
                                $("#id_Setfirstvalue").empty();
                          });';
    $mform->addElement('html', html_writer::tag('script', $scriptdeleteinitialoptions));