Manual talk:Hooks/SkinTemplateOutputPageBeforeExec

Jump to navigation Jump to search

When I try to use this hook in an extension, the MediaWiki page shows lots of warnings like this:

Warning: Cannot modify header information - headers already sent by (output started at (myexteion).php:14) in includes/WebResponse.php on line 1

Is this hook not suited for use in an extension? How can these warnings be suprssed?

Example: suppress "User contributions" link in the toolbox for non-sysops[edit]

Add in LocalSettings.php to suppress "User contributions" link in the toolbox for non-sysops (tested with MediaWiki 1.15.1 --Wikinaut 17:29, 7 January 2010 (UTC)).

$wgGroupPermissions['*']['listcontributions'] = false;
$wgGroupPermissions['sysop']['listcontributions'] = true;

// disable "User contributions" in the toolbox, if the user is not allowed to use it 
function StripContributions( &$templateengine, &$template ) { 
	global $wgUser;
	if ( !$wgUser->isAllowed( 'listcontributions' ) ) {
		unset( $template->data['nav_urls']['contributions'] );
    return true;
$wgHooks['SkinTemplateOutputPageBeforeExec'][] = 'StripContributions';

This code suppresses only the link in the toolbox. Read here, how disable the Special:Contribution page as such.


The call in SkinTemplate.php is wfRunHooks( 'SkinTemplateOutputPageBeforeExec', array( &$this, &$tpl ), so the first argument is a SkinTemplate object, and the second is a "template" object, apparently usually (always?) a subclass of QuickTemplate. I'm not sure what kinds of objects are supposed to be referred to by $template and $templateEngine in the current page's text, so I haven't changed it. Does anyone know how veteran MW hackers would naturally interpret variables named $template and $templateEngine?

This hook seems like a bad idea[edit]

It allows people to redefine what template variables shared across various skins mean [1]

Use cases like suppressing User:Contributions feel like they would be better done if they were built into core?

[1] Jdlrobson (talk) 19:22, 6 December 2013 (UTC)