Moodle moodle_page::set_state:无效状态错误

Moodle moodle_page::set_state : Invalid state error

在本地插件的页面中,$OUTPUT->header(); 出现错误:

检测到编码错误,必须由程序员修复:传递给 moodle_page::set_state 的状态无效。我们处于状态 1,请求状态 1。

我已经检查过 google 原因可能是对 $OUTPUT->header();

的第二次调用

但是没有第二个电话

另外,令人疑惑和惊讶的是,其他页面都没有报错,包括,类似其他本地插件,只有这个本地插件页面有报错。

此外,我尝试了 $OUTPUT->has_started() ,它 returns false.

另外,$PAGE->state 是 0 ,就在调用 header 之前。

Moodle 版本 2.8

请多多指教

编辑:

    require_once('../../config.php');

require_login();

global $CFG,$PAGE;

$PAGE->set_context(context_system::instance());
$PAGE->set_pagelayout('standard');
$PAGE->set_title('');
$PAGE->set_heading('');
$PAGE->set_url($CFG->wwwroot.'/local/tpmg/pending-manual.php');

if( ! $OUTPUT->has_started() )
{
    // echo $PAGE->state;exit;
    echo $OUTPUT->header();
}

if( isloggedin() )
{
    require_once('lib.php');

    $pmQuizzesObj = get_pm_quizzes();

    if( $pmQuizzesObj->pendingAttsCount )
    {
        $pmQuizzesArr = $pmQuizzesObj->quizzesArr; 

        echo get_string( 'tpmgpano','local_tpmg' ) . " : " . $pmQuizzesObj->pendingAttsCount . "<br/>";

        // Here goes table for Quizzes needing manual grading.
        $content = "<table class='mot_table'>";
        $content .= "<th>" . get_string( 'tpmgthead','local_tpmg' ) . "</th>";
        foreach( $pmQuizzesArr as  $key=>$currPmQuiz )
        {
            $tpmgQuizHref = $CFG->wwwroot . '/mod/quiz/report.php?id=' . $currPmQuiz->cmid . '&mode=grading';
            $content .= "<tr>";
            $content .= "<td>&nbsp;<a href=" . $tpmgQuizHref . ">" . $currPmQuiz->quizname . "</a></td>";
            $content .= "</tr>";
        }
        $content .= "</table>";

        echo $content;
    }
    else
    {
        echo get_string( 'tpmgnopm','local_tpmg' );
    }
}
else
{
    require_login();
}

echo $OUTPUT->footer();

编辑: 我发现页面正文,可能还有页眉,都被打印了两次。请指导。

您必须在调用 $OUTPUT->header() 之前设置页面参数 ( $PAGE->set_* );