Ma-Premiere-Application-SPIP-3

Pour ré-organiser le fonctionnement de son etablissement, ma moman doit refaire et distribuer des fiches "métier", pour l’ensemble des intervenants.

Commençant à réfléchir au problème, nous l’avons très vite modélisé, puis maquetté, et un prototype opérationnel était disponible en moins de trois heures...

Cette expérience nous a tellement surpris, qu’il m’a paru intéressant de vous faire découvrir un autre usage de SPIP, d’autant qu’il met en œuvre plusieurs facilités méconnues de ce CMS, sans parler de la Fabrique.

Mots -clés : secteurs et variantes, articles virtuels, mots-clés et groupes pièces jointes, boucles et récursivité, ré-emploi de noisettes, paramètres par défaut, critères optionnels, surcharge de formulaires, mots sur mots...

Article publié le 29 mars 2013, et actualisé en mars 2020

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Attention, cette page est encore en  

 Analyse de la structuration des données

Commençons par analyser le contenu à gérer [1] : la fiche Metier se compose par sélection de plusieurs Taches et Activités, une Activité étant définie comme regroupant plusieurs Activités ou Taches élémentaires.
Il s’agit donc de descriptions textuelles libres (articles rubriques),qui seront communes au cadre d’emplois de l’etablissement, valables pour toutes les fiches qui seront définies ou modifiées ulterieurement.

Mais ces fiches font aussi appel à des Savoirs, savoir-etre ou savoir-faire, à choisir dans des listes de mots-expressions : dans chacun de ces deux groupes de mots, qui recouvrent des notions différentes, il peut y en avoir jusqu’à une cinquantaine ; on pense immédiatement à gérer ces éléments avec la gestion avancée des groupes de mots-clés, souvent oubliés dans SPIP.

Enfin, on voudrait définir les fiches articles Métiers qui nous intéressent au final, en leur adjoignant l’utilisation de plusieurs activités et taches : de la même façon qu’un mot-clé établit un lien de la fiche avec un savoir, le lien d’une fiche avec ses activités (et taches associées), sera marqué par un mot-clé portant sur les rubriques (et/ou articles) : ceci demande simplement de créer un mot-clé marqueur associé à chaque métier [2], que nous devrons ensuite associer à chaque enregistrement à adjoindre à la fiche Metier.

 Saisir des structures de données

Précisons que l’ensemble des manipulations ci-après a été réalisé par l’interface privée du nouveau SPIP3 sans aucune modification...
Les premières pages écrites sur le nouveau site [3] n’étaient que des articles traditionnels, mis dans une première rubrique, nommée Documentation, prévue pour faciliter la réflexion collaborative : ce n’est qu’après que nous sommes passés à la modélisation d’un prototype opérationnel.

- Activités
La gestion des Activités va s’élaborer dans un Secteur dédié : créons à la racine du site (le libellé correspondant n’apparait plus ?) une nouvelle rubrique, à l’interieur de laquelle sont immédiatement générées trois activités (leurs TITREs sont écrits en Majsucule, de façon à mieux voir ce qui se passe, tant au niveau des données [4] que pour distinguer des détails pour l’utilisatrice.

Partant du principe que les Taches sont élémentaires, et qu’elle peuvent donner lieu à des détails de procédure, et d’outillage, assez complexe, nous créerons des Articles pour chaque tache identifiée : ceux-ci sont mis (et publiés immédiatement) dans chacune des trois activités saisies plus haut.

Comme une activité semble trop complexe, on la décompose en sous-activités, et d’ailleurs récursivement car même cette démarche connexe est à structurer en plusieurs activités de domaines différents ; à cette occasion, apparait la nécessite de ré-organiser les activités, par domaine d’abord, par catégorie-métier ensuite.
Après création de nouvelles têtes de chapitre dans le Secteur des Activités, l’interface privée permet facilement de modifier la rubrique de rattachement pour la descendre sous la tête de chapitre correspondante.

- Plan du Site
Regardons un peu ce qui a été saisi : c’est l’affichage traditionnel du Plan du site, et c’est l’occasion pour ma moman de découvrir la puissance des boucles récursives dans SPIP...
Avec toute notre catégorisation des activités et sous-activités, par activités types dans le secteur, visualiser les TITREs et ID de nos activités, sous-activités, sous-sous.....sous-sous-activités, avec les taches qui y sont détaillées à tout niveau serait bien agréable : nous avons expurgé quelques enrichissements de style CSS, de la traditionnelle boucle [5] plan (limité au secteur n°7 des Activités) ci-dessous, avec un paramètre par défaut, qui permettra ultérieurement de limiter l’édition à un seul domaine d’activité partiel.

  1. <BOUCLE_depart(RUBRIQUES){id_parent = #ENV{id_rubrique,7}}>
  2. <h2>#ID_RUBRIQUE. #TITRE  (#ID_SECTEUR)</h2>
  3. <BOUCLE_rubriques(RUBRIQUES){id_parent}{tout}>
  4.         <li><strong><a href="#URL_RUBRIQUE"  [ title="(#DESCRIPTIF|supprimer_tags|attribut_html)"] >#TITRE*</a>
  5.                 </strong> [#ID_RUBRIQUE]  :
  6.  
  7.         <B_articles>
  8.            <ul>
  9.         <BOUCLE_articles(ARTICLES) {id_rubrique} {tout}>
  10.                         <li><a href="#URL_ARTICLE"  
  11.                                [title="(#DESCRIPTIF|supprimer_tags|attribut_html)"] >
  12.                                #TITRE*</a> (#ID_ARTICLE)
  13.                         </li>
  14.         </BOUCLE_articles>
  15.                 </ul>
  16.         </B_articles>
  17.  
  18.  
  19.        <BOUCLE_sous_rubriques(BOUCLE_rubriques)></BOUCLE_sous_rubriques>
  20.        [(#REM)     ######################################################]
  21.  
  22.          </li>
  23.        </BOUCLE_rubriques>
  24.         </ul>
  25.         </B_rubriques>
  26.  
  27. </BOUCLE_depart>

Télécharger


Nota Bene : LPour s’approcher de la récurisvité dans les parcours de bases de données SQL, le parcours récursif automatisé ci-dessus vous plait-il ?

Tiens, l’une des taches doit etre effectuée à l’identique dans deux activités qui n’ont rien à voir : acceptons les articles virtuels dans la configuration, et il suffit lors de la création dez l’article-tache dans la seconde Activité, d’indiquer le numéro du premier article dans le CHAPO, et le tour est joué.
Peut-etre que "polyHierarchie" dont on me disait du bien lundi, apporterait une autre solution, mais c’est de ce Dimanche que SPIP3 [6] accepte la mise-en-place automatique de quelques plugins immédiatement indispensables [7]... (voir ci-dessous).
Peut-etre que "Grappes" est une solution, mais ayant appris son existence le lendemain.... [8] A première vue, ce plugin est l’anc^tre de la nouvelle structure des liens utilisée par SPIP 3.

 La Gestion des Mots-clés

Pour définir les mots-clés, et permettre de les regrouper par thèmes, il faut aller dans l’espace privéà la Configuration de Spip, plus précisement le "Contenu du Site", et descendre jusqu’au pavé "Mots-clés", pour les activer ; nous en profiterons pour activer aussi la Gestion des Documents joints (juste en dessous).

Nous créons ensuite trois groupes de mots-clés, SAVOIR-etre et SAVOIR-faire, et le troisième pour enregistrer des SAVOIR-professionnels, que nous complétons avec une dizaine de mots ou de phrases chacun.

- Visualisation des codes
Le problème de tous ces mots-clés et de leurs groupes, c’est qu’il faut se souvenir des numéros d’#ID_ affectés à la création, pour pouvoir afficher les mots affectés dans le groupe SAVOIR-faire [9].
Vite fait, une page -très classique- va nous afficher tous les mots-clés definis, rangés par groupes de mots, avec leur intitulé #TITRE, et le code d’identification associé : foin de la présentation, un simple ?page=mots et le tour est joué, par le fichier ci-dessous placé en ./squelette/mots.html

  1. [(#REM) MOTS = tous les mots-clés  (limités à un groupe si spécifié) ]
  2. [(#REM)<h1>Tous les mots-clés </h1><a href="#URL_PAGE{groupes_mots}"></a>]
  3. <BOUCLE_groupes(GROUPES_MOTS){par titre}{id_groupe?}>
  4.     <h2> [  #ID_GROUPE ] <a href="#URL_PAGE{mots,id_groupe}">[(#TITRE)]</a> [: (#TEXTE)]</h2>
  5.       <BOUCLE_mots(MOTS)'{id_groupe}>
  6.          #ID_MOT <a href="#URL_MOT">[(#TITRE)]</a>
  7.       </BOUCLE_mots>
  8. </BOUCLE_groupes>

Télécharger

 Utilisation des données

Les Métiers vont être définis comme articles dans un autre secteur (N°27), organisés selon une arborescence de filières par autant de sous-rubriques : pour afficher chaque Metier, on préparera une variante du squelette article [10].
Pour établir le lien avec les savoirs ou les activités, on définira un mot-clé marqueur de l’article, donc il serait raisonnable d’ouvrir un groupe spécialisé correspondant (ce sera le groupe $id_groupe=9 voir ci-après), associé aux Articles metiers.
Nous aurions pu avoir une autre structuration, -uniquement en mots-clés- qui sera évoquée en fin d’article.

Pour créer une fiche métier, créons un article, et créons immédiatement le mot-clé marqueur correspondant, que nous lui associons aussitot : reste à lier les savoirs, les activités et taches choisies : cela veut dire aller "marquer" chaque Activité [11], Tache [12] ou Savoir [13] avec ce marqueur.

Il faut reconnaitre que l’interface privée de SPIP n’est pas tres ergonomique de ce point de vue, mais déjà parfaitement opérationnelle [14].
- Donc, dans l’interface privée, prenons dans l’ordre les activités voulues, et rajoutons-leur le mot-clé marqueur du groupe Métier.
- Nous pourrions marquer de meme tous les articles voulus dans les Activités correspondantes, mais en fait nous allons faire une première hypothèse simplificatrice : toutes les taches dépendant d’une activité selectionnée sont supposées sélectionnées.

Comment afficher les Activités correspondantes : ce sont toutes les rubriques, toujours dans notre secteur 7 qui ’portent’ le mot-clé marqueur spécifique : affichons-les

  1. [(#REM) Mot = Noisette d'affichage d'usage d'un mot-clé ]
  2. <h2>Usage du Mot clé </h2><a href="#URL_PAGE{groupes_mots}"></a>
  3. <BOUCLE_rub(RUBRIQUES){id_mot}{id_secteur=7}>
  4.          #ID_RUBRIQUE <a href="#RUBRIQUE">[(#TITRE)]</a><br />
  5.          <BOUCLE_art(ARTICLES){id_rubrique}>
  6.            <h4>#TITRE </h4>
  7.             #TEXTE
  8.            </BOUCLE_art>
  9. </BOUCLE_rub>

Télécharger

Un appel du type ?page=mot&id_mot= doit faciliter l’appel partiel (à valider) : en fait, il nous suffit de déployer un squelette associé au métier voulu, que nous appelons metier.html.
Souvenons-nous que nous y avons défini un Article du Secteur n° p 21 pour l’obtenir, nous aurions aussi pu l’appeler article-21.html, à condition de dupliquer déjà le squelette natif article.html dans notre dossier squelettes, du moins quand nous l’aurons retouvé : comme je n’ai pas cherché où c’etait sous SPIP3, j’ai récupéré un vieux squelette de 1.9, et cela le fait....

Come il n’y a encore qu’un seul mot-clé marqueur dans le groupe des métiers, il suffit de faire :

  1. [(#REM)   METIER  noisette dédiée à l'affichage des métiers (par son mot-clé) ]
  2. <h2>Actvités Associées</h2>
  3. <BOUCLE_mot(MOTS){id_groupe IN 9 }>
  4.    #INCLURE{fond=mot, id_mot=#ID_MOT}
  5. </BOUCLE_mot>

Télécharger

Et nous utilisons directement en noisette la page précédente (ayant installé Escal à l’arrache, je ne l’avais pas mise en ./squelettes/contenu/, ce qui serait plus joli encore !)

Tant qu’a faire, ou va un peu structurer une page de menu sommaire, car il commence à y avoir de nombreuses pages à connaitre :

  1. [(#REM)    un sommaire vite-fait (avec des appels à la Z) ]
  2. <ul>
  3. <li> Accès au <a href="./ecrire/">Privé</a></li>
  4. <li> Accès au <a href="#URL_PAGE{contenu/page-plantout}">Plan Tous</a></li>
  5. <li> Accès au <a href="#URL_PAGE{activites}">Activités</a></li>
  6. <li> Accès au <a href="#URL_PAGE{metier}">Poste Métier défini</a></li>
  7. <li> Accès au <a href="#URL_PAGE{mots}">Mots</a></li>
  8. <li> Accès au <a href="#URL_PAGE{mot}">Mot</a></li>
  9. </ul>

Télécharger

Il n’y a plus qu’à rajouter à l’affichage de notre premier Métier, l’affichage de compétences, savoirs et autres documents joints, pour que le prototype fasse .... ce que nous n’aurions espérer !

Rajoutons donc une boucle récupérant tous les savoirs des deux groupes prédéfinis :

  1. [(#REM) noisette d'accès aux Savoirs liés à une fiche article métier id_article ]
  2. <h2>SAVOIRS </h2><a href="#URL_PAGE{groupes_mots}"></a>
  3. <BOUCLE_groupes(GROUPES_MOTS){par titre}{id_groupe IN 2,3}>
  4.     <h3> [  #ID_GROUPE ] <a href="#URL_MOT">[(#TITRE)]</a> [: (#TEXTE)]</h3>
  5.       <BOUCLE_mots(MOTS){id_groupe}>
  6.          #ID_MOT <a href="#URL_MOT">[(#TITRE)]</a>
  7.       </BOUCLE_mots>
  8. </BOUCLE_groupes>
  9. <code>
  10.  
  11. et comme pendant ce temps d'autres relations ont été saisies et modélisées, passons cette boucle en noisette de façon a pouvoir la réutiliser !
  12.  
  13. <code class="spip">
  14. [(#REM)   METIER  affichage du métier associé (par son mot-clé) ]
  15. <h2>Actvités Associées</h2>
  16. <BOUCLE_mot(MOTS){id_groupe IN 9 }>
  17.    #INCLURE{fond=mot, id_mot=#ID_MOT}
  18. </BOUCLE_mot>
  19.  
  20. <h2>SAVOIRS </h2><a href="#URL_PAGE{groupes_mots}"></a>
  21. <BOUCLE_groupes(GROUPES_MOTS){par titre}{id_groupe IN 2,3}>
  22.     <h3> [  #ID_GROUPE ] <a href="#URL_MOT">[(#TITRE)]</a> [: (#TEXTE)]</h3>
  23.       <BOUCLE_mots(MOTS){id_groupe}>
  24.          #ID_MOT <a href="#URL_MOT">[(#TITRE)]</a>
  25.       </BOUCLE_mots>
  26. </BOUCLE_groupes>
  27.  
  28. <h1>Relations </h1><a href="#URL_PAGE{groupes_mots}"></a>
  29. <BOUCLE_relations(GROUPES_MOTS){par titre}{id_groupe IN 6,7}>
  30.     <h2> [  #ID_GROUPE ] <a href="#URL_MOT">[(#TITRE)]</a> [: (#TEXTE)]</h2>
  31.       <BOUCLE_interloc(MOTS){id_groupe}>
  32.          #ID_MOT <a href="#URL_MOT">[(#TITRE)]</a>
  33.       </BOUCLE_interloc>
  34. </BOUCLE_relations>

Télécharger

Bon, c’est pas fini : il se trouve que la gestionnaire des Métiers aimerait bien pouvoir "marquer" une activité principale pour mettre son #DESCRIPTIF en complément affiché au Métier : tant qu’il n’y a qu’un seul métier, cela se résout en prenant un second mot-clé marqueur principal ou secondaire d’un groupe complémentaire "Mission"...

Mais, pour prévoir une généralisation, en pensant au plugin "Mots sur Mots", et dans l’idée d’avoir peut-être des "attributs" sur ces mot-clés, il faudrait pouvoir affecter un mot-clé à.... un mot-clé !
Outre la modification (vite apportée) au code original de SPIP, il faut donc affecter ce mot-clé "principal" ou "secondaire", au mot-clé caractéristique, ou plutôt ici, à une occurrence du lien "métier" branché à l’Activité principale voulue....
L’interface n’existe pas (encore) en standard...car il faudrait une"double affectation" aux paramètres du mot-clé (sur l’objet et son #ID_, et sur un identifieur d’une occurrence de lien du mot-clé #ID... [15]

Quoiqu’il en soit, voila finalement notre bloc-noisette-contenu pour une fiche-article-métier (soit une fiche choisie, sion une au hasard..) : voilà !

  1. [(#REM) fiche métier  METIER  affichage du métier associé (par son mot-clé) ]
  2. <BOUCLE_fiche(ARTICLES){id_article?}{id_secteur= 7} {par hasard}{0,1}>
  3. <h1>Fiche Metier : #TITRE</h1>
  4.    #TEXTE
  5.  
  6.   <BOUCLE_princip(RUBRIQUES){
  7. <h2>Activités Associées</h2>
  8. <BOUCLE_mot(MOTS){id_groupe IN 9 }>
  9.    #INCLURE{fond=mot, id_mot=#ID_MOT}
  10. </BOUCLE_mot>
  11.  
  12. <h2>SAVOIRS </h2><a href="#URL_PAGE{groupes_mots}"></a>
  13. <INCLURE{fond=mot, id_groupe IN (2,3),env}>     <!-- env passe le "id_article" necessaire --><BOUCLE_groupes(GROUPES_MOTS){par titre}{id_groupe IN 2,3}>
  14.     <h3> [  #ID_GROUPE ] <a href="#URL_MOT">[(#TITRE)]</a> [: (#TEXTE)]</h3>
  15.       <BOUCLE_mots(MOTS){id_groupe}>
  16.          #ID_MOT <a href="#URL_MOT">[(#TITRE)]</a>
  17.       </BOUCLE_mots>
  18. </BOUCLE_groupes>
  19.  
  20. <h2>Relations </h2>
  21. <INCLURE{fond=mot, id_groupe IN (4,5),env}>     <!-- env passe le "id_article" necessaire -->

Télécharger


Et maintenant !  [16]
D’abord, il reste tout de meme a valider le fonctionnement sur plusieurs fiches métiers (en relisant la noisette MOT ci-dessus, qui devrait pour bien faire etre insérée dans l’article métier, et je crois qu’il y a encore à affiner quelques détails pour redescendre le mot-clé marqueur dans les boucles de Savoirs et de Relations !) ; cela passera lors de l’intégration dans le squelette metier definitif, auquel on rajoutera la boucle d’affichage des documents joints.

Ensuite, et bien, il serait tout de meme plus agréable d’obtenir un formulaire complet de saisie des mots-clés par groupe au moyen des cases a cocher ; pareillement pour la saisie des Activités, ce qui est presque fait en récupérant le bloc formulaires/inc-select-rubriques initialement créé pour l’usage exclusif du plugin Accès Restreint, en changeant une ligne d’appel pour accéder à partir d’une rubrique ou sous-rubrique des Activités.

Après quoi ? Vous ferez appel à un WebMestre CSS pour représenter tout cela en mise-en-forme à la page ; j’avais voulu tester Escal, sinon, j’aurais déjà tout passé en Z et c’était quasiment fini !



Merci de nous signaler les coquilles, imprécisions ou erreurs qui figureraient dans cette page.

[1Nous n’avons pas effectué de modélisation Merise par un MCD, mais vous devinerez sans doute le schéma possible...

[2Il est à gager qu’un plugin de création-association automatique d’un mot-clé à la création d’un objet quelconque de l’interface privée apparaitra rapidement en SPIP3, car le mécanisme est le même, et unetable unique est prête pour tous les liens d’objets...

[3Voir détail des opérations d’installation ci-dessous.

[4Structuration pour le développeur

[5Pour une première approche de cette boucle récursive Entre rubrique et article, voyez les Boucles Récursives de la documentation officielle SPIP.

[6SPIP3 est encore en phase de finalisation à cete date..

[7Crayons, Glossaire pour faciliter la définition d’un dictionnaire de données, Acces-Restreint car on pourrait vite avoir à protéger des informations nominatives.

[8D’ailleurs, j’aimerais savoir à quoi sont "réservés" les mots-clés ?

[9Dans le prototype du moins, pour une application diffusée, on utiliserait une méta #CONFIG{n_gr_savoir_faire} par exemple..

[10Pas le tempsde le trouver dans ... extension ? Notepad++ nous verra directement saisir les boucles de contenu, que nous allons vous expliciter ci-après

[11Rubrique du Secteur

[12Article du Secteur

[13Mot-Clé(s) du/des Groupes de Mots-clés

[14Sauf en standard pour les mots-clés, mais nous y reviendrons !

[15Aujourd’hui on ne peut pas identifier une occurrence de lien, puisqu’il s’agit uniquement d’une table de liaison-relation entre un id_mot et un objet identifié (objet+id_objet ; il reste impossible de caractériser chaque lien ....

[16Hier soir, nous nous sommes arrêtés avec la satisfaction du prototype accompli, pour siroter un kir breton devant les restes du soleil couchant !


Liens A2A visibles seulement pour les inscrits.
Liens visibles seulement pour les inscrits.

Article publié le 29 mars 2013, et actualisé en mars 2020 Provisoire (à compléter...) .

Répondre à cet article