Pour ce faire, je me suis rendu dans l’espace privé de spip, et j’ai ajouté un &var_mode=inclure
sur la page d’un article. J’ai ainsi reperé que le bloc qui m’intéressait se situait dans prive/infos/article.html
.
En ouvrant ce fichier, j’ai reperé la ligne qui m’intéressait :
[(#ID_ARTICLE|instituer_article{#ID_RUBRIQUE,#STATUT})]
Cela affiche le bloc de changement de statut.
J’ai donc recopier cela dans mon squelette article.html
[1].
Mais comme je ne voulais pas que n’importe qui voit ce bloc, j’ai testé l’autorisation
[(#AUTORISER{instituer,article,#ID_ARTICLE}|oui)
[(#ID_ARTICLE|instituer_article{#ID_RUBRIQUE,#STATUT})]]
Seulement voilà, le filtre |instituer_article
n’existe pas dans tout SPIP. Il est défini dans le fichier prive/statuts/article_fonctions.php
, ce qui veut dire qu’il n’existe que pour le squelette prive/infos/article.html
.
function instituer_article($id_article, $id_rubrique, $statut){
$instituer_article = charger_fonction('instituer_article', 'inc');
return $instituer_article($id_article, $statut, $id_rubrique);
}
J’ai donc recopié cela dans un fichier article_fonctions.php
[2]
Le problème est que la fonction instituer_article()
renvoi des liens dans l’espace privé, et non le lien de l’article dans l’espace public. Du coup, après avoir changé le statut d’un article, je me retrouvais sur page 404 du type : http://http://geekographie.maieul.net/ecrire/ecrire/?exec=articles&id_article=10
, ce qui était génant.
Comme il n’existe pas de pipeline pour cette fonctions, j’ai du faire quelquechose de « sale », en modifiant son résultat.
Et du coup mon fichier articles_fonctions.php
contient :
function instituer_article($id_article, $id_rubrique, $statut){
$instituer_article = charger_fonction('instituer_article', 'inc');
return str_replace('ecrire%2Fecrire%2F%3Fexec%3Darticles%26id_article%3D','spip.php%3Farticle',$instituer_article($id_article, $statut, $id_rubrique));
}
Par ailleurs, la fonction instituer_article
de inc
contient un appel à fonction puce_statut()
. Il a donc fallu que je rajoute une inclusion supplémentaire auparavent.
include_spip('inc/puce_statut');
Et voilà, cela fonctionne ! Je peux modifier le statut d’un article depuis le site public, mais les autres ne voient pas ce bouton.
En résumé
Dans le fichier article.html
, à l’endroit souhaité
[(#AUTORISER{instituer,article,#ID_ARTICLE}|oui)
[(#ID_ARTICLE|instituer_article{#ID_RUBRIQUE,#STATUT})]]
Dans le fichier article_fonctions.php
<?php
include_spip('inc/puce_statut');
function instituer_article($id_article, $id_rubrique, $statut){
$instituer_article = charger_fonction('instituer_article', 'inc');
return str_replace('ecrire%2Fecrire%2F%3Fexec%3Darticles%26id_article%3D','spip.php%3Farticle',$instituer_article($id_article, $statut, $id_rubrique));
}
?>