Utiliser simplement les jointures dans SPIP

  un exemple sur les zones d’accès restreint


SPIP permet des jointures (liens automatisés entre tables) de façon puissante, mais parfois un peu inattendue tellement c’est simple.

Avec la nouvelle gestion des tables de LIENS de SPIP3, voici un exemple un peu surprenant au premier abord, du moins à la mise au point.....


 L’objectif

Quand on commence a utiliser le plugin Accès Restreint, la superposition des zones rend rapidement la situation un peu confuse....

On veut voir une superposition des zones couvrant chaque rubrique de l’arborescence du site.

 L’arborescence

La page squelette d’arborescence ci-dessous est déduite du squelette de Plan, en omettant l’affichage des articles : elle donne une vue plus synthétique de l’organisation de votre site.

  1. [(#REM) Fil d'Ariane ]
  2. <p id="hierarchie"><a href="#URL_SITE_SPIP/"><:accueil_site:></a>
  3. &gt; <strong class="on"><:arbo_site:></strong></p>
  4. <!-- ZONE A CONTENUR -->
  5. <div class="contenu-principal">
  6. <div class="cartouche">
  7. <h1> Arborescence du Site </h1>
  8. <p> Si vous préférez, le <a href="#URL_PAGE{plan}">Plan détaillé du Site</a>,
  9. avec tous les titres d'Articles.</p>
  10. </div>
  11. <BOUCLE_secteurs(RUBRIQUES) {racine}{par titre}{tout}>
  12. <h2 class="h2"><a href="#URL_RUBRIQUE"
  13. [title="(#DESCRIPTIF|supprimer_tags|attribut_html)"]>
  14. <!-- <BOUCLE_articles_racine(ARTICLES) {id_rubrique}>
  15. [(#LOGO_RUBRIQUE||image_reduire{0,25}) - ]
  16. [(#TITRE|supprimer_numero|textebrut)]<br />
  17.   </BOUCLE_articles_racine>"> [(#REM) fin du <A ] -->
  18. [(#LOGO_RUBRIQUE_NORMAL|image_reduire{0,20})]
  19. [(#TITRE|textebrut)] </a>
  20. </h2>
  21.  
  22. <BOUCLE_ar_racine(ARTICLES){id_rubrique}></BOUCLE_ar_racine>
  23. #TOTAL_BOUCLE Articles</B_ar_racine>
  24. [(#REM) sous-rubriques ]
  25.  
  26.  
  27. <B_rubriques>
  28. <ul>
  29. <BOUCLE_rubriques(RUBRIQUES) {id_parent} {par num titre} {tout}>
  30. <li>
  31. <strong><a href="#URL_RUBRIQUE"
  32. [ title="(#DESCRIPTIF|supprimer_tags|attribut_html)"] >
  33. [(#TITRE|supprimer_numero|textebrut)]</a>
  34. [(#LOGO_RUBRIQUE_NORMAL||image_reduire{0,12})]
  35. [- (#LOGO_RUBRIQUE_SURVOL||image_reduire{0,12})]
  36. </strong>
  37. <B_articles>
  38. <ul>
  39. <BOUCLE_articles(ARTICLES) {id_rubrique}>
  40. [<li>(#REM)
  41. <a href="#URL_ARTICLE"
  42. [title="(#INTRODUCTION|supprimer_tags|attribut_html)"] >
  43. [(#TITRE|supprimer_numero|textebrut)]</a>
  44. </li>]
  45. </BOUCLE_articles>
  46. </ul>
  47. [(#REM)
  48. <p style="text-align:right"><small>#TOTAL_BOUCLE pages articles à consulter...
  49. modifications en (# _rubriques:DATE|affdate_mois_annee).</small></p>
  50. ]
  51. </B_articles>
  52. <BOUCLE_sous_rubriques(BOUCLE_rubriques)></BOUCLE_sous_rubriques>
  53. </li>
  54. </BOUCLE_rubriques>
  55. </ul>
  56. </B_rubriques>
  57. </BOUCLE_secteurs>
  58. <p> Vous préférerez peut-être voir la totalité des articles ?</p>
  59. <p> Consultez alors le <a href="#URL_PAGE{plan}">Plan détaillé du Site</a>,
  60. ou les <a href="#URL_PAGE{modifs}">dernières modifications</a>.</p>
  61. </div>

Télécharger

En utilisant cette page arbo, tirée du plan traditionnel de SPIP [1] -que vous pouvez voir en application sur ce site-, on peut facilement afficher les seules rubriques : on veut alors y adjoindre les zones d’accès restreint correspondantes...

 Accéder à la table de liens

Les ZONES sont liées aux objets éditoriaux, par une table ZONES_LIENS, qui comme chaque table LIEN de SPIP3 comporte pour chaque id_zone (index identifiant l’objet initial)des lignes avec les deux champs normalisés :

  • objet (varchar) : le nom de l’objet éditorial pointé
  • id_objet (bigint(21)) : la valeur de clé de l’occurrence pointée

Ici cette table de liens met en relation avec chaque zone identifiée, des auteurs et des rubriques, les occurrences qui définissent la zone en référence.

Il semble facile d’afficher toutes les zones (en protégeant l’accès de façon réservée au Webmestre), et dans cette boucle, d’afficher chaque rubrique citée (avec ses dépendances en clair)... regardez bien !

  1. [(#AUTORISER{webmestre}|sinon{arbo})] <B_zone>
  2. <ul>Les Zones declarées couvrent :
  3. <BOUCLE_zone(ZONES)><li><b>#TITRE</b><br />
  4. <BOUCLE_rubzones(RUBRIQUES) {id_zone} {objet='rubrique'} >
  5. #PUCE #OBJET = #ID_OBJET <b>#INFO_TITRE{rubrique,#ID_OBJET} </b> #TITRE &nbsp; <br />
  6. <B_rubs>(<i><BOUCLE_rubs(RUBRIQUES){branche}{1,100}>
  7. [#ID_RUBRIQUE] #TITRE &nbsp; & &nbsp; </BOUCLE_rubs></i>)<br /></B_rubs>
  8. </BOUCLE_rubzones></li>
  9. </BOUCLE_zone>
  10. </ul>
  11. </B_zone>

Télécharger

La Boucle BOUCLE_rubzone trouve ’magiquement les rubriques correspondantes, en utilisant des critères (ici {objet='rubrique'}) sur des champs qui n’appartiennent pas à la table RUBRIQUES, ni d’ailleurs à la tables ZONES, mais uniquement à la table ZONES_LIENS qui n’a même pas à être indiquée [2] ; d’ailleurs le problème initial (qui provoque cet article) était la surprise de ne pas arriver a faire reconnaitre cette table ZONES_LIENS (sauf à l’écrire en table physique(spip_zones_liens) !


Merci de nous signaler les coquilles ou erreurs qui figureraient dans cette page.

[1La page affiche également les icones/logos des rubriques..

[2Elle a déja été déclarée comme servant à des jointures au compilateur dans le plugin par :

function accesrestreint_declarer_tables_interfaces($interface){
        $interface['tables_jointures']['spip_auteurs'][] = 'zones_liens';
        $interface['tables_jointures']['spip_zones'][] = 'zones_liens';
        $interface['tables_jointures']['spip_rubriques'][] = 'zones_liens';

 !
Toutefois, pour généraliser cette magie à d’autres objets éditoriaux, il vous faudrait rajouter d’autres déclarations !


Liens visibles seulement pour les inscrits.

Article publié le 24 juin 2016, et actualisé en juin 2016 .

Répondre à cet article