SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

286 Plugins, 197 contribs sur SPIP-Zone, 215 visiteurs en ce moment

Accueil > Navigation > Chemin de navigation > Balise #TITRE_PARENT > Balise #TITRE_PARENT

Balise #TITRE_PARENT

25 août 2007 – par b_b, James – 22 commentaires

16 votes

Une balise pour afficher le titre de la rubrique parente, sans boucle supplémentaire.

Voici une simple balise qui évite d’ajouter une boucle dans un squelette pour afficher le titre de la rubrique parente.

tetue nous disait au Ticket #1003 :

Ce n’est pas grand-chose, mais c’est un besoin que j’ai de façon répétitive depuis que je connais SPIP : dans un squelette article, afficher rapidement le titre de sa rubrique parente, pour faire un lien de retour (par exemple).

Dans une boucle article, on peut utiliser #URL_RUBRIQUE et #ID_RUBRIQUE... mais pas #TITRE pour afficher le titre de la rubrique en question, pour lequel on devra alors sortir l’artillerie d’une boucle, si bien qu’on peut se retrouver avec quelque chose d’un peu grotesque :

<a href="#URL_RUBRIQUE">
<BOUCLE_rub(RUBRIQUES){id_rubrique}>#TITRE</BOUCLE_rub>
</a>

 ;-)

Mais une balise #TITRE_PARENT simplifierait drôlement la vie :

<a href="#URL_RUBRIQUE">#TITRE_PARENT</a>

Elle permettrait d’afficher facilement le titre de la rubrique parente dans les boucles articles, brèves, rubriques...

La chose est faite. Ce plugin ajoute à l’arsenal des balises utilisables sur votre site la fameuse balise, sans boucle supplémentaire.

Explications

Le fichier titre_parent.php est le seul fichier réellement essentiel à SPIP pour fournir la fonctionnalité. En effet, le plugin n’a pour rôle que de proposer ce fichier comme extension au compilateur de SPIP.

Il se décompose en trois parties : un filtre, une balise, une spécification de traitement de la balise.

LE FILTRE :
La fonction « titre_parent() » est le filtre qui permet de récupérer l’information voulue :

<?php
function titre_parent($id_rubrique) {
    
/* Utiliser la bonne fonction de recherche sql (fetch)
    selon la version de SPIP, */
    
$fetch function_exists('sql_fetch') ? 'sql_fetch' 'spip_fetch_array';
    
/* par précaution, on vérifié que le paramètre est
    une valeur numérique entière, */
    
if(!($id_rubrique intval($id_rubrique))) return '';
    
/* on rédige puis on exécute la requête pour la base de données */
    
$q 'SELECT titre FROM spip_rubriques WHERE id_rubrique='.$id_rubrique;
    if(
$r spip_query($q))
        
/* si cette requête renvoie un résultat pour le champ demandé,
        on le retourne */
        
if($row $fetch($r))
            return 
$row['titre'];
    
/* sinon, on renvoie une chaine vide */
    
return '';
}
?>

Seul ce filtre suffirait, puisque qu’on peut récupérer l’information par l’écriture suivante dans un squelette :

<BOUCLE_a(ARTICLES)>
[(#ID_RUBRIQUE|titre_parent)]
</BOUCLE_a>

LA BALISE :
La balise #TITRE_PARENT ne sert qu’à une chose, faire croire au compilateur SPIP qu’il existe un champ dans la base de données.

Le code va subtilement lui faire chercher autre chose, un ’vrai’ champ de la base de données et on profitera de l’aubaine pour appliquer directement le filtre qu’on vient d’imaginer.

La fonction « balise_TITRE_PARENT_dist() » définit donc la balise #TITRE_PARENT. Cette fonction est appelée par le compilateur au recalcul de la page, pour remplacer le symbole « #TITRE_PARENT » par l’appel du code php, voilà comment :

Le fichier html dans lequel on va placer #TITRE_PARENT, qu’on appelle squelette, est décortiqué par le compilateur pour y découvrir des symboles qu’il va transformer en une portion de code plus complexe.

Ces portions de code vont être empilées dans une mémoire à laquelle on accédera plus tard pour recomposer un nouveau fichier, écrit en php.

La définition d’une balise SPIP sert donc à préciser par quelle portion de code sera remplacé le symbole auquel il fait référence, le tout étant stocké au bon endroit dans la pile. Cet endroit est un objet technique appelé Champ (parce qu’il fait référence au champ dans une table de base de données). Celui-ci est capable d’explorer la pile de code qu’on a mémorisé et pour faciliter l’exploration de cette pile mémoire, ainsi que la composition du code, on peut utiliser les fonctions du compilateur. C’est le fameux paramètre $p.

<?php
function balise_TITRE_PARENT_dist($p) {
    
/* explorer la pile memoire pour atteindre le 'vrai' champ */
    
$id_rubrique champ_sql('id_rubrique'$p);
    
/* le code php qui sera execute */
    
$p->code "titre_parent(".$id_rubrique.")";
    return 
$p;
}
?>

On enregistre donc dans ce Champ le code php qu’on souhaite. Ici, un appel au filtre titre_parent détaillé plus haut, avec en paramètre, la référence à un ’vrai’ champ de la la table de base de données. D’où l’utilisation de la fonction champ_sql, qui explore la pile pour atteindre le « vrai » champ sql qui nous intéresse ici.

LA SPÉCIFICATION DES TRAITEMENTS :
Une fois que le compilateur à entièrement exploré le fichier html et constitué cette fameuse pile mémoire, il va fabriquer un fichier en php qui aura donc remplacé tous les symboles par du « vrai » code. Ce résultat est visible quand on affiche le débusqueur (&var_mode=debug).

Mais avant d’imprimer le code qu’on a demandé dans le fichier, SPIP va ajouter d’autres traitements, autrement dit, il va appliquer d’autres filtres. Par exemple, la typographie, la fonction propre() qui transformera les raccourcis spip en html ou autre. Tout ces traitements sont regroupés dans une variable $table_des_traitements.

Un SPIP installé connaît les traitements qu’il doit appliquer au champ qui lui sont connu. Mais #TITRE_PARENT, il ne le connaît pas encore. Or, c’est le titre d’une rubrique, il faut appliquer la typographie des #TITREs traditionnels. On explique donc au compilateur que #TITRE_PARENT est à traiter comme un #TITRE normal et par conséquent, la typographie standard lui sera appliquée avant son affichage.

<?php
/* invoquer la table des traitements */
include_spip('public/interfaces');
global 
$table_des_traitements;
/* un TITRE_PARENT est un TITRE, sauf si on y tient absolument */
if (!isset($table_des_traitements['TITRE_PARENT'])) {
    
$table_des_traitements['TITRE_PARENT'] = $table_des_traitements['TITRE'];
}
?>

Petite finesse ici : Les experts pourront toute de même personnaliser le traitement qu’ils tiennent à réserver à cette nouvelle balise. Aussi, si un traitement spécifique lui est affecté dans le fichier config/mes_options.php, on ne l’écrase pas.

Évolution possible

Cette balise est directement utilisable dans une boucle de rubriques, d’articles, de sites et de brèves. Toutes celles et ceux qui ont imaginé d’autres objets éditoriaux attachés aux rubriques pourront l’utiliser aussi.

Par contre, un MOTS est attaché à un GROUPE de mots et non à une rubrique. Il faut donc « patcher », c’est à dire proposer du code supplémentaire, si on souhaite que cette même balise fonctionne pour un mot-clé.

L’envie d’aller plus loin ne manquera pas : trier une boucle par titre_parent ! :) C’est un peu plus compliqué, mais pas infaisable ;)

Nous proposons donc que ces deux évolutions, et celles qui vous viennent à l’esprit, fassent l’objet d’un petit jeu : Utilisez ce forum ou venez discuter sur SPIP-ZONE pour proposer vos solutions.

Dans SPIP3

Dans spip3, ce plugin n’est pas disponible car on peut accéder directement à cette information avec l’appel à  #INFO_TITRE{rubrique,#ID_PARENT}.
Cf Balise #INFO_XXX.

Voir en ligne : http://plugins.spip.net/titreparent

P.-S.

merci à Mathieu Drouet (IZO) pour le logo :)

Dernière modification de cette page le 10 décembre 2014

Retour en haut de la page

Vos commentaires

  • Le 9 octobre 2014 à 22:47, par DD En réponse à : Balise #TITRE_PARENT

    Bonjour,

    Est-ce qu’il y a un équivalent pour SPIP3 ?

    Merci

    dd

    Répondre à ce message

  • Le 24 novembre 2008 à 23:34, par Patrice Vanneufville En réponse à : balise #TITRE_PARENT

    Bonjour !

    Voila, fort pratique, cette balise a été intégrée dans le plugin « Le Couteau Suisse ». La portée en a été un peu étendue à tous les objets possédant une rubrique parente, et complétée grâce à la balise #TITRE_GROUPE (qui en fait est un équivalent de #TYPE).

    Article correspondant : Les balises #TITRE_PARENT et #TITRE_OBJET.

    • Le 23 août 2009 à 00:11, par Cerdic En réponse à : balise #TITRE_PARENT

      La portée en a été un peu étendue à tous les objets possédant une rubrique parente

      Encore une fois, tu fork le plugin original, et tu ne le fais pas bénéficier des améliorations que tu propose ...

    • Le 26 octobre 2009 à 10:36, par SuperYMS En réponse à : balise #TITRE_PARENT

      bonjour,

      effectivement je trouve que c’est pas juste de forker des plugins très bons (comme blocs dépliables, en travaux, titre-parent, ...) sur le couteau suisse (@ Patrice-Vanneufville) sans apporter les améliorations au plugin original ?

      d’ailleurs personnellement je ne veux pas utiliser le couteau suisse pour une ou deux fonctions seulement, je préfère passer par mes_options.php ou par certains plugins.

      amicalement et bonne continuation à tous.

      vive SPIP !

    • Le 7 juin 2015 à 23:28, par tetue En réponse à : Balise #TITRE_PARENT

      Ce plugin incorpore désormais ces améliorations, depuis la révision 90008.

    Répondre à ce message

  • Le 31 janvier 2011 à 23:00, par luapmada En réponse à : Balise #TITRE_PARENT

    Bonsoir,

    dans un article situé dans une sous-rubrique de niveau 4, je cherche a recuperer le titre de la sous-rubrique de niveau 2, sans succès.

    je recupere bien le niveau 1 avec SECTEUR, niveau 3 avec PARENT et 4 avec RUBRIQUE, quid du niveau 2 ? n’existe t’il pas une astuce « GRAND_PARENT » ?

    Merci d’avance pour vos lumières et bonne soirée.

    • Le 31 janvier 2011 à 23:44, par Patrice Vanneufville En réponse à : Balise #TITRE_PARENT

      Salut,

      Pour le grand-parent, le raccourci n’existe pas en effet... Dans ce cas la boucle semble inévitable... Un truc du genre (non testé) :

      1. <BOUCLE_Art(ARTICLES)>
      2. <BOUCLE_Rub(RUBRIQUES){id_rubrique}>
      3. <br />Le grand-parent de #_Art:TITRE est #_Rub:TITRE_PARENT
      4. </BOUCLE_Rub>
      5. </BOUCLE_Art>

      Télécharger

      N’hésite pas à nous renvoyer le résultat de tes expériences... ;-)

    • Le 1er février 2011 à 01:26, par Patrice Vanneufville En réponse à : Balise #TITRE_PARENT

      Je complète, pour les internautes :

      « Tu peux passer par une boucle HIERARCHIE :

      1. <BOUCLE_grand_parent(HIERARCHIE){id_article}{1,1}> #TITRE </BOUCLE_grand_parent>

      à placer dans une boucle ARTICLE.
      ÉricL
       »

    Répondre à ce message

  • Le 26 octobre 2009 à 08:42, par Clement En réponse à : Création de nouvelle balise

    Bonjour, et merci pour la présentation de création de balise par plugin. En la combinant avec un champ extra, j’arrive à ajouter un champs extra à un article et à l’afficher dans un squelette « article.html ».

    Cependant, ça ne marche pas dans une « boucle(articles) » et pour cause : j’ai lu quelque part que le PHP d’un squelette est lu APRES le code spip. Ma boucle sort donc uniquement les valeurs du premier enregistrement de la table « spip_articles ».

    Quelqu’un sait-il comment déclarer de façon propre une nouvelle balise qui ira prendre directement la valeur du champs « duree » de la table « spip_articles » ?

    Merci :)

    Répondre à ce message

  • Le 17 novembre 2008 à 18:05, par Tarek Boughanmi En réponse à : Une autre technique avec une boucle HIERARCHIE

    Bonjour,

    J’arrive au même résultat en utilisant une boucle de type HIERARCHIE inverse ;)

    Bonne soirée

    Répondre à ce message

  • Le 17 novembre 2008 à 15:59, par izo En réponse à : balise #TITRE_PARENT

    heu le logo est de moi ;)

    Répondre à ce message

  • Le 12 juin 2008 à 15:06, par chankalan En réponse à : balise #TITRE_PARENT

    ce plugin est très simple et limpide, c’est un très bon support pour approfondir la construction/fabrication de plugin justement : connaissant rien encore à la chose, je l’ai décortiqué et adapté pour créer la balise #TITRE_SECTEUR, utile dans un projet précis... et utile pour apprendre à faire un plugin

    Répondre à ce message

  • Le 18 septembre 2007 à 14:20, par middir En réponse à : balise #TITRE_PARENT

    Salut,

    je trouve cette contrib trés partaique , mais j’ai des soucis a la faire marché.

    J’ai installer et activé le plugin. Dés que je fais appel a cette nouvelle balise je me retrouve avec une page blanche.

    Je n’utilise ausun autre plugin, et je suis sous spip 1.9.2a

    Merci de votre aide,

    Cdlt,

    • Le 29 septembre 2007 à 22:20, par James En réponse à : balise #TITRE_PARENT

      En effet, le plugin n’était pas compatible avec les séries 1.9.2. C’est chose faite maintenant.

    Répondre à ce message

  • Le 11 septembre 2007 à 15:09, par Grégoire G En réponse à : balise #TITRE_PARENT

    Bonjour

    Si tu es dans un boucle incluse dans une autre, c’est encore plus simple.

    <BOUCLE_lstRub(RUBRIQUES)>
       <BOUCLE_art(ARTICLES){id_rubrique}>
       <br /> Art :  #ID_ARTICLE - #TITRE
       [(#REM) titre de la rubrique maintenant]
       <br />#_lstRub:TITRE
       [(REM) ça marche avec les URL aussi]
       </BOUCLE_art>
    </BOUCLE_lstRub>

    Répondre à ce message

  • Le 28 août 2007 à 19:48, par Cyril MARION En réponse à : balise #TITRE_PARENT

    Super ! Enfin quelques explications claires sur la fameuse variable $p !

    Du coup, je comprends mieux ce que j’ai un peu fait « à l’arrache » dans ma précédente contrib (voir balise trimestre).

    En cours : une balise #SUIVANT et #PRECEDENT...

    A+

    Cyril

    Répondre à ce message

Répondre à cet article

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • Acces Restreint 3.0

    11 décembre 2008 – 784 commentaires

    Le plugin accès restreint permet de définir et de gérer des zones de l’espace public en accès restreint. Cette version du plugin a été redévelopée et optimisée tout spécialement pour SPIP 2.0. Il en découle une amélioration des performances sur les gros (...)

  • Champs Extras 3

    16 janvier 2012 – 538 commentaires

    Ce plugin permet de créer et/ou de gérer des champs supplémentaires dans les objets éditoriaux de SPIP. Il permet donc de prendre en compte et d’afficher de nouveaux éléments dans n’importe quel objet éditorial de SPIP. Screencast Vous n’aimez pas (...)

  • Réservation d’événements

    16 mars 2015 – 190 commentaires

    Ce plugin permet d’offrir aux visiteurs de s’inscrire pour un évènement du plugin Agenda et de gérer les réservations enregistrées. Installation Le plugin s’installe comme n’importe quel plugin. il nécessite : Agenda API de vérification (...)

  • Les crayons

    23 avril 2008 – 815 commentaires

    Ce plugin permet d’éditer les contenus sur les pages publiques du site, sans passer par l’espace privé de SPIP.

  • LESS pour SPIP : Less-CSS (anciennement LESSpip)

    5 novembre 2010 – 43 commentaires

    Less-CSS (Anciennement LESSpip) est un plugin intégrant facilement le logiciel LESS dans SPIP. LESS est une extension de CSS ajoutant les variables, les classes, les opérations, les imbrications au langage. Facilitant ainsi l’écriture de (...)

Ça spipe par là