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

This is an API alternative to appending to $CFG->additionalhtmlhead and could be used for adding meta tags or similar to the page. It MUST return a string containing well a formed html chunk, or at minimum an empty string.

function tool_headtag_before_standard_html_head() {

   return "<meta name='foo' value='before_top_of_body_html' />\n";

}

before_standard_top_of_body_html

This enables a plugin to insert a chunk of html at the start of the html document. Typical use cases include some sort of alert notification, but in many cases the Notifications may be a better fit. It MUST return a string containing a well formed chunk of html, or at minimum an empty string.

function tool_callbacktest_before_standard_top_of_body_html() {

return "

Before standard top of body html

";

}

render_navbar_output