Manual:Hooks/SkinAfterPortlet

From mediawiki.org
SkinAfterPortlet
Available from version 1.35.0
Occurs whenever a page is rendered and allows to add HTML after portlets have been put out.
Define function:
public static function onSkinAfterPortlet( $skin, $portletName, &$html ) { ... }
Attach hook: In extension.json:
{
	"Hooks": {
		"SkinAfterPortlet": "MediaWiki\\Extension\\MyExtension\\Hooks::onSkinAfterPortlet"
	}
}
Called from: File(s): skins/Skin.php
Interface: SkinAfterPortletHook.php

For more information about attaching hooks, see Manual:Hooks .
For examples of extensions using this hook, see Category:SkinAfterPortlet extensions.


After output of portlets, allow injecting custom HTML after the section. Any uses of the hook need to handle escaping. Note that if portlet is empty and $html is non empty, the portlet will be rendered.

Details[edit]

  • $skin Skin
  • $portletName: string portlet name
  • &$html: string The HTML code to display. Will be wrapped into a div tag, but apart from that will be output into the page directly. Escape dangerous signs!

Example[edit]

This example will place an ad in the sidebar following the Toolbox ("tb") portlet. Replace the data-ad-client and data-ad-slot with your own values.

$wgHooks['SkinAfterPortlet'][] = function($skin, $portletName, &$html) {
    $user = $skin->getUser();
    if ($user->isRegistered() && $portletName === "tb") {
        $html = <<< EOT
        <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
                <ins class="adsbygoogle"
                     style="display:inline-block;width:160px;height:1000px;margin:20px 0 0 -20px;"
                     data-ad-client="ca-pub-00000000000000"
                     data-ad-slot="000000000">
                </ins>
        <script>
                (adsbygoogle = window.adsbygoogle || []).push({});
        </script>
        EOT;
        return true;
    }
};