This pipeline is used to add buttons to the private zone navigation menu. It is not really so useful since the creation of the <bouton> tag in the plugin.xml file (see Defining buttons).

$boutons_admin = pipeline('ajouter_boutons', $boutons_admin);

The "ajouter_boutons" pipeline accepts a parameter table of "button identifer / button description" couples (with a PHP class of Bouton(Button)). A button can declare a sub-menu in the "submenu" variable of the Bouton(Button) class. You must create an instance of the Bouton class to define this:

function plugin_ajouter_boutons($boutons_admin){
$boutons_admin['identifier'] = 
	new Bouton('image/du_bouton.png', 'Button title', 'url');
$boutons_admin['identifier']->sousmenu['other_identifier'] = 
	new Bouton('image/du_bouton.png', 'Button title', 'url');
return $boutons_admin;

The third url parameter of the Bouton class is optional. By default, it will be an "exec" page with the same name as the identifier provided (ecrire/?exec=identifier).


The "Thelia" plugin, which makes it possible to interface SPIP with the Thélia software package, uses this pipeline to add a link to the Thélia catalogue to the "Édition" menu (with the "naviguer" identifier):

function spip_thelia_ajouter_boutons($boutons_admin) {
	// if you are admin
	if ($GLOBALS['visiteur_session']['statut'] == "0minirezo") {
		$boutons_admin['naviguer']->sousmenu['spip_thelia_catalogue'] = 
		new Bouton(_DIR_PLUGIN_SPIP_THELIA . 'img_pack/logo_thelia_petit.png', 'Catalogue Th&eacute;lia');
	return $boutons_admin;

Migration to the new system

To rewrite this example to the new system, two things would need to be separated: the button declaration, and the authorisation to view it or not (in this case, authorisation is only for administrators). The declaration is written in the plugin.xml file:

<bouton id="spip_thelia_catalogue" parent="naviguer">
	<titre>title language string</titre>		

The authorisation component is built with a special authorisation function (use the autoriser pipeline to define this):

function autoriser_spip_thelia_catalogue_bouton_dist($faire, $type, $id, $qui, $opt) {
	return ($qui['statut'] == '0minirezo');

Author Mark Baber Published : Updated : 12/03/23

Translations : English, français