Prendre la main sur les sorties dans votre page spéciale

This page is a translated version of the page Taking over output in your special page and the translation is 100% complete.
Other languages:

Normalement, votre page spéciale contiendra le HTML avec (ou sans) les sorties wikicode via $wgOut, qui produiront la sortie HTML actuelle et l'habillage à la fin de la requête.

Mais parfois vous souhaitez voir les sorties directement, comme pour l'export d'un type XML personnalisé, un flux de données, ou un téléchargement binaire. Cela n'est pas très difficile à réaliser, mais pas très évident non plus... Voici à titre d'exemple quelques extraits de Special:Export :

Dans la methode execute() de votre classe SpecialPage :

  // Disable the regular OutputPage stuff -- we're taking over output!
  $wgOut->disable();
  
  // Cancel output buffering and gzipping if set
  // You might need this if you're creating HUGE output, otherwise skip it
  //wfResetOutputBuffers();
  
  // Set your content type... this can XML or binary or whatever you need.
  header( "Content-type: application/xml; charset=utf-8" );
  
  // If you want to force browsers to download instead of showing XML inline you can do something like this:
  // Provide a sane filename suggestion
  $filename = urlencode( $wgSitename . '-' . wfTimestampNow() . '.xml' );
  header( "Content-disposition: attachment;filename={$filename}" );
  
  // Now you can output data directly with 'print', 'echo', etc.
  print "<xml><hello to='world'/></xml>";