Note:

If you want to create a new page for developers, you should create it on the Moodle Developer Resource site.

Output callbacks

From MoodleDocs

There are cases where we want any plugin to contribute to a chunk of the output of any given page. We want this to be loosely coupled so you don't have say an admin tool's code leaking into your theme. There are a variety of callbacks which enable any plugin to add or modify certain parts of the output and at certain stages in the rendering process.

add_htmlattributes

This is used to append extra attributes into the html element of the page which are required elsewhere. An example might be a facebook block plugin which uses the opengraph js libraries which need the xml namespace to be setup. It should return an array of attribute key and values like this:

function tool_facebook_add_htmlattributes() {

    return array(
        'xmlns:og' => 'http://ogp.me/ns#', # this should be in the page
    );

}


before_footer

This enables you to easily inject a chunk of JS or CSS into every page, for instance an analytics tool like Google Analytics or Facebook pixel. It only has side effects and it's return value is ignored:

function tool_mytool_before_footer() {

   global $PAGE;
  $PAGE->requires->js_init_code("alert('before_footer');");

}

before_http_headers

This enables you to easily inject a HTTP header into every page. It only has side effects and it's return value is ignored:

function tool_headertest_before_http_headers() {

   header("X-CustomHeader: SomeValue");

}

Note that this is called after the page is generated but just prior to the headers being sent. So internal system state may have already been changed (eg adding events to the log) and the page generation may have been expensive. You should not use this callback for things like redirecting away under some conditions (we need a new callback earlier in the process for this).

before_standard_html_head

An better API alternative to appending to $CFG->additionalhtmlhead

before_standard_top_of_body_html

render_navbar_output