objet_compte_enfants

Ce pipeline permet de compléter ou de modifier le comptage des enfants d’un objet.

Il est appelé comme ceci dans le fichier ecrire/inc/rubriques.php :

// On passe le tableau des comptes dans un pipeline pour que les plugins puissent ajouter (ou retirer) des enfants
$compte = pipeline('objet_compte_enfants',
	array(
		'args' => array(
			'objet' => 'rubrique',
			'id_objet' => $id_rubrique,
			'statut' => 'publie',
			'date' => $date
		),
		'data' => $compte
	)
);

Il reçoit comme arguments l’objet dont on veut compter les enfants grâce à objet et id_objet. Il peut aussi recevoir la date ainsi que le statut des enfants que l’on veut compter.

Dans l’appel précédent, on demande donc à compter les enfants publiés d’une rubrique donnée.

Le contenu data du pipeline est un tableau associatif, dans lequel la clé est le type d’un objet au pluriel (par exemple : « articles »), et la valeur est un nombre entier, correspondant au nombre d’enfants de ce type.

Exemple

Le plugin « Polyhiérarchie » ajoute aux rubriques le comptage des enfants indirects :

function polyhier_objet_compte_enfants($flux) {

	if ($flux['args']['objet']=='rubrique'){
		$statut = (isset($flux['args']['statut'])?" AND A.statut=".sql_quote($flux['args']['statut']):"");
		$postdates = ($GLOBALS['meta']["post_dates"] == "non") ?
			" AND A.date <= ".sql_quote(date('Y-m-d H:i:s')) : '';

		$flux['data']['articles_indirects']+= sql_countsel(
						"spip_rubriques_liens as RL join spip_articles as A ON (RL.objet='article' AND RL.id_objet=A.id_article)",
						'RL.id_parent='.$flux['args']['id_objet'].$statut.$postdates);

		$statut = (isset($flux['args']['statut'])?" AND R.statut=".sql_quote($flux['args']['statut']):"");
		$flux['data']['rubriques_indirectes']+= sql_countsel(
						"spip_rubriques_liens as RL join spip_rubriques as R ON (RL.objet='rubrique' AND RL.id_objet=R.id_rubrique)",
						'RL.id_parent='.$flux['args']['id_objet'].$statut);
	}
	return $flux;
}

Auteur RastaPopoulos Publié le : Mis à jour : 12/03/23

Traductions : English, français