Vous connaissez la balise #LESAUTEURS ? non ? On peut lire ici qu’elle compte parmis les balises calculées et qu’elle :
#LESAUTEURS affiche les auteurs de cet article, avec lien vers leur propre page publique, afin de pouvoir directement leur écrire ou de consulter la liste des articles qu’ils ont publié. Ceci depuis [SPIP 1.9], car auparavant, il s’agissait d’un lien vers leur adresse e-mail. Cela évite de créer une boucle AUTEURS pour obtenir le même résultat.
Alors, on se dit qu’une balise #LESADMINISTRATEURS qui afficherait la liste des administrateurs d’une rubrique, ce serait pas mal.
ça éviterait de créer une boucle...
...enfin... une boucle, c’est vite dit, la gestion des « admins restreints » est telle que ça devient vite le bazar pour mettre ça en boucle... mais bon, elle existe et la voici :
La Boucle
Une certaine Elodie l’a réalisé pour vous sur ce site : Afficher les administrateurs d’une rubrique et vous pouvez lui dire merci !
Une inclusion de squelette et le tour est joué.
Toutefois, si vous préférez une balise, le code ci-dessous fait la même chose. Sachez qu’avec ce code, si vous placez #LESADMINISTRATEURS en dehors d’une boucle, vous aurez la liste des admins du site (ceux qui ne sont pas restreints) et que dans une boucle, vous aurez en plus les admins restreints.
Le code
dans mes_fonctions.php
[1]
function balise_LESADMINISTRATEURS($p){
$nom = $p->id_boucle;
$p->code = "sql_administrateurs(" .
champ_sql('id_rubrique', $p) .
",'" .
$nom .
"','" .
$p->boucles[$nom]->type_requete .
"','" .
$p->boucles[$nom]->sql_serveur .
"')";
#$p->interdire_scripts = true;
return $p;
}
function sql_administrateurs($id_rubrique, $table, $id_boucle, $serveur='') {
$auteurs = "";
$ids = array();
//Contexte: dans une boucle, j'affiche d'abord les admins de la rubrique
if ($id_rubrique) {
$result_auteurs = spip_abstract_select(
array('auteurs.id_auteur', 'auteurs.nom'),
array('auteurs' => 'spip_auteurs',
'lien' => 'spip_auteurs_rubriques'),
array("lien.id_rubrique=$id_rubrique",
"auteurs.id_auteur=lien.id_auteur"),
'',array(),'','', array(),
$table, $id_boucle, $serveur);
while($row_auteur = spip_abstract_fetch($result_auteurs, $serveur)) {
$ids[] = $row_auteur['id_auteur'];
$nom_auteur = typo($row_auteur['nom']);
$url_auteur = generer_url_auteur($row_auteur['id_auteur']);
if ($url_auteur) {
$auteurs[] = "<a href=\"$url_auteur\">$nom_auteur</a>";
} else {
$auteurs[] = "$nom_auteur";
}
}
//2: ensuite les admins restreint de la hierarchie qui mene a cette rubrique
$result_auteurs = spip_abstract_select(
array('auteurs.id_auteur', 'auteurs.nom'),
array('auteurs' => 'spip_auteurs',
'lien' => 'spip_auteurs_rubriques'),
array("lien.id_rubrique IN (".calculer_hierarchie($id_rubrique).")",
empty($ids) ? "1=1" : "auteurs.id_auteur NOT IN (".join($ids, ", ").")",
"auteurs.id_auteur=lien.id_auteur"),
'',array(),'','', array(),
$table, $id_boucle, $serveur);
while($row_auteur = spip_abstract_fetch($result_auteurs, $serveur)) {
$ids[] = $row_auteur['id_auteur'];
$nom_auteur = typo($row_auteur['nom']);
$url_auteur = generer_url_auteur($row_auteur['id_auteur']);
if ($url_auteur) {
$auteurs[] = "<a href=\"$url_auteur\">$nom_auteur</a>";
} else {
$auteurs[] = "$nom_auteur";
}
}
//3: enfin les admins du site
$result_auteurs = spip_abstract_select(
array('lien.id_auteur', 'COUNT(lien.id_rubrique)'),
array('lien' => 'spip_auteurs_rubriques'),
array(empty($ids) ? "1=1" : "lien.id_auteur NOT IN (".join($ids, ", ").")"),
'id_auteur',array(),'','', array(),
$table, $id_boucle, $serveur);
while($row_auteur = spip_abstract_fetch($result_auteurs, $serveur)) {
$ids[] = $row_auteur['id_auteur'];
}
$result_auteurs = spip_abstract_select(
array('auteurs.id_auteur', 'auteurs.nom'),
array('auteurs' => 'spip_auteurs'),
array("auteurs.statut='0minirezo'",
empty($ids) ? "1=1" : "auteurs.id_auteur NOT IN (".join($ids, ", ").")"),
'',array(),'','', array(),
$table, $id_boucle, $serveur);
while($row_auteur = spip_abstract_fetch($result_auteurs, $serveur)) {
$nom_auteur = typo($row_auteur['nom']);
$url_auteur = generer_url_auteur($row_auteur['id_auteur']);
if ($url_auteur) {
$auteurs[] = "<a href=\"$url_auteur\">$nom_auteur</a>";
} else {
$auteurs[] = "$nom_auteur";
}
}
}
else {
//Contexte: hors boucle, j'affiche les admins du site seulement
//1: j'identifie les auteurs qui sont admins restreints
$result_auteurs = spip_abstract_select(
array('lien.id_auteur', 'COUNT(lien.id_rubrique)'),
array('lien' => 'spip_auteurs_rubriques'),
array(), 'id_auteur',array(),'','', array(),
$table, $id_boucle, $serveur);
while($row_auteur = spip_abstract_fetch($result_auteurs, $serveur)) {
$ids[] = $row_auteur['id_auteur'];
}
//2: j'identifie les auteurs qui sont admins ET non restreints
$result_auteurs = spip_abstract_select(
array('auteurs.id_auteur', 'auteurs.nom'),
array('auteurs' => 'spip_auteurs'),
array("auteurs.statut='0minirezo'",
empty($ids) ? "1=1" : "auteurs.id_auteur NOT IN (".join($ids, ", ").")"),
'',array(),'','', array(),
$table, $id_boucle, $serveur);
while($row_auteur = spip_abstract_fetch($result_auteurs, $serveur)) {
$nom_auteur = typo($row_auteur['nom']);
$url_auteur = generer_url_auteur($row_auteur['id_auteur']);
if ($url_auteur) {
$auteurs[] = "<a href=\"$url_auteur\">$nom_auteur</a>";
} else {
$auteurs[] = "$nom_auteur";
}
}
}
return (!$auteurs) ? "" : join($auteurs, ", ");
}
Et alors, pourquoi pas un modèle ?
Bien sur, on pourrait envisager un modèle appelé directement ou par la balise ci-dessus. Ce modèle pourrait être directement inspiré des boucles d’Elodie... à vous de jouer ;-)
Discussions par date d’activité
3 discussions
Superbe ! Grand merci pour cette contrib.
Une variante #LESINVITES qui permet d’afficher la liste ... des invités :
Précision : les invités ici sont des visiteurs inscrits.
Répondre à ce message
Pour comprendre cette contrib, il faut être coredev, donc je n’en vois pas l’intérêt...
Par exemple, que font :
- champ_sql
- spip_abstract_select, spip_abstract_fetch ?
l’intérêt, c’est de l’utiliser si tu en as besoin. De l’étudier si tu as envie d’apprendre...
c’est la première fois que je me prends ’coredev’ comme une insulte :)
sinon, rtfm, il y a un site de doc technique, à bon entendeur
Répondre à ce message
Ça marche, c’est assez génial, mais pour qu’il n’affiche, dans une boucle, que les admins de la rubrique et pas ceux du site entier, il a fallu que j’enlève la partie /3 : enfin les admins du site
Tout ça sous spip 1.9.1
Merci pour cette contrib :-)
Répondre à ce message
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |