0

这个问题真的很伤我的头。

我正在为 Moodle 开发一个自定义等级导出插件,并将grade_export 类划分为子类:

class grade_export_sitscsv extends grade_export {
...

我创建的表单设置了两个自定义变量,因此我实现了一个 *process_form()* 函数,然后在父类中调用该函数:

function process_form($formdata) {
  $this->grade_item = preg_replace('/itemids\[([0-9]+)\]/','\1',$formdata->grade_item);
  $this->sits_assnum = $formdata->sits_assnum;

  parent::process_form($formdata);
}

我可以看到这些实例变量是在我的 *display_preview()* 函数中设置的:

public function display_preview() {
  echo("<h2>Do we need a preview?</h2>");
  echo("<p> Grade item: ".$this->grade_item.", SITS num: ".$this->sits_assnum."</p>");
}

(打印,例如,Grade item: 7487, SITS num: 7)。

但是,当我尝试使用 *print_grades()* 函数中的变量时,它们没有设置:

public function print_grades() {
    global $CFG;
    echo("Grade item: ".$this->grade_item.", SITS num: ".$this->sits_assnum."\n");

...将Grade item: , SITS num:打印到我的输出文件中。

我将不胜感激任何可以帮助我解决此问题的建议。

4

1 回答 1

0

感谢您的回答,Michael 和 mkaatman - 在一位同事的帮助下,我终于解决了。

问题是,调用print_grades()的对象与调用display_preview()时的对象不同,即使它是同一个类 - 来自process_form()的值被写入另一种形式(如<input type="hidden"... elements) 中的中间页面,并从此数据实例化了一个新对象。

我只需要确保我的数据被写入第二种形式,然后传递给新对象。

于 2013-02-17T23:54:37.540 回答