Suite à la présentation de CFG à la SPIP Party de Clermont-Ferrand le 10 novembre 2007, voici un article présentant des possibilitées avancées de CFG.
Variables CFG détaillées
| Propriété | Description |
| titre | Un des 2 titres, fera le gros titre si boite est aussi présent |
| boite | Le titre de la boite formulaire, défaut titre si présent, ’Configuration machin" sinon |
| descriptif | Le descriptif affiché en haut de colonne gauche |
| liens* | Les liens sur autre cfg affichés dans cette colonne |
| onglet | (v1.0.8) mettre ’non’ pour ne pas afficher un lien (onglet) vers ce fond sur la page de configuration de cfg |
| nom | Le nom du meta où sera stockée la configuration, par défaut c’est le nom du formulaire, xxx dans fonds/cfg_xxx |
| casier | Permet optionnellement de faire des sous-tableaux, par exemple si on veut séparer une config en plusieurs sous-formulaires |
| storage | Permet de stocker les valeurs ailleurs que dans spip_meta (metapack). Stockage possible : extrapack (champs extra des tables), php (dans un fichier php dans le repertoire /local/cfg), classic (comme le fait SPIP avec le stockage des metas), table (dans un champs d’une table, mais ne fonctionne pas à l’heure actuelle) |
| table | Permet de définir la table de stockage (dans les cas avec storage=extrapack ou table) |
| autoriser | Permet de déclarer le type d’autorisation nécessaire pour l’accès à la page de configuration |
Lorsque la propriété est un tableau auquel on veut rajouter un élément, il faut faire précéder le = par une astérisque * comme :
<!-- liens*=crayons -->
La propriété onglet
Elle permet d’afficher (par défaut) ou non un onglet dans la page ecrire/?exec=cfg. Cet onglet prend le nom du fichier fond (toto, si le fichier s’appelle cfg_toto.html).
Ainsi, si un plugin/squelette possède plusieurs fonds, cela permet de limiter le nombre d’onglets sur la page.
La propriété casier
Elle permet de stocker les champs de formulaire dans un tableau, permettant de classer ses variables.
Si nom=monsquelette et casier=chose, alors on récupère les valeurs par #CONFIG{monsquelette/chose/nom_du_champ}
Note sur casier : Il est possible d’indiquer des sous tableau dans casier :
<!-- casier=option/navigation -->. On récupère alors les valeurs du formulaire par #CONFIG{squelette/option/navigation/champ_du_formulaire}
Exemple des propriétés onglets, liens et casier
Prenons l’exemple d’un squelette qui utilise 3 fonds distincts (cfg_squelette, cfg_squelette_complement1, cfg_squelette_complement2). On peut définir les fichiers comme cela :
cfg_squelette
- <!-- titre=Mon squelette -->
- <!-- descriptif=Mon descriptif -->
- <!-- nom=squelette -->
- <!-- liens*=squelette_complement1 -->
- <!-- liens*=squelette_complement2 -->
- #CACHE{0}
- ... le formulaire ...
cfg_squelette_complement1
- <!-- titre=Mon squelette - options 1 -->
- <!-- descriptif=Mon descriptif... -->
- <!-- nom=squelette -->
- <!-- casier=option1 -->
- <!-- onglet=non -->
- <!-- liens*=squelette -->
- <!-- liens*=squelette_complement2 -->
- #CACHE{0}
- ... le formulaire ...
cfg_squelette_complement2
- <!-- titre=Mon squelette - options 2 -->
- <!-- descriptif=Mon descriptif... -->
- <!-- nom=squelette -->
- <!-- casier=option2 -->
- <!-- onglet=non -->
- <!-- liens*=squelette -->
- <!-- liens*=squelette_complement1 -->
- #CACHE{0}
- ... le formulaire ...
Les trois fonds vont s’enregistrer dans la variable de spip_meta ’squelette’. Le fond squelette_complement1 va se stocker dans ’squelette/option1’ (casier=option1) : on pourra donc faire #CONFIG{squelette/option1/champ_du_formulaire}.
Seul un lien vers le premier fond (squelette) sera affiché dans la page /ecrire/?exec=cfg car les deux autres ont la variable onglet=non. Un lien vers les autres fonds s’affiche lorsque l’on est dans un des trois fichiers (/ecrire/?exec=cfg&cfg=squelette).
Personnalisation des auteurs
Grace au storage extrapack, il est possible d’affecter des paramètres aux auteurs, comme on le ferait pour une entrée dans spip_meta.
On récupère ensuite les paramètres d’un auteur simplement avec un .
#CONFIG{~/nom_du_champ} : affiche le champ de l’auteur connecté (attention au cache si vous l’utilisez dans la partie publique, qui risquerait de prendre les valeurs d’un autre auteur)
#CONFIG{~toto/nom_du_champ} : où toto est un login, affiche les paramètres de l’auteur ’toto’ ;
[(#CONFIG{~[(#SESSION{login})]/nom_du_champ})] : dans la partie publique (La balise #SESSION est introduite dans SPIP en 1.9.3) permet d’afficher les paramètres de l’auteur connecté (la présence de #SESSION invalide le cache).
Voici un formulaire qui permet de dire si un auteur souhaite afficher ou non quelques paramètres :
- <!-- autoriser=voir -->
- <!-- titre=Personnalisation-->
- <!-- storage=extrapack -->
- <form method="post">[(#ENV{_cfg_}|form_hidden)]
- <fieldset>
- <input type="hidden" name="id" class="cfg_id" value="#SESSION{id_auteur}" />
- <label>Afficher ses articles ?</label>
- <select name="mes_articles">
- <option value="oui"[(#ENV{mes_articles}|=={oui}|?{' selected="selected"'})]>Oui</option>
- <option value="non"[(#ENV{mes_articles}|=={non}|?{' selected="selected"'})]>Non</option>
- </select>
- <br />
- </fieldset>
- <input type="submit" name="_cfg_ok" value="<:OK:>" />
- <input type="reset" value="<:Reset:>" />
- <input type="submit" name="_cfg_delete" value="<:Supprimer:>" />
- </form>
Explications de code :
<!-- autoriser=voir --> : Permet d’afficher le formulaire même pour les redacteurs.
<!-- storage=extrapack --> : Déclare de stocker dans les champs Extras
<input type="hidden" name="id" class="cfg_id" value="#SESSION{id_auteur}" /> : définit l’identifiant de la table (par défaut spip_auteurs) où les valeurs seront enregistrées. Le class="cfg_id" permet à CFG de savoir que ce champ est à utiliser comme clé primaire. #SESSION{id_auteur} transmet à ce champ la valeur de l’id_auteur connecté (SPIP >= 1.9.3)
récupération des valeurs :
- Connecté : [(#SESSION{nom}|sinon{visiteur})]
- [(#CONFIG{~[(#SESSION{login})]/mes_articles}|=={oui}|?{' ',''})
- [(#INCLURE{fond=inc-mes-articles}{visiteur=#SESSION{id_auteur}})]
- ]
#CONFIG{~[(#SESSION{login})]/mes_articles} : récupère la valeur de " toto/mes_articles" si l’auteur toto est connecté.
Personnalisation des extras d’autres tables
Sur le même principe que les auteurs, il est possible de personnaliser des champs extras d’autres tables. Il suffit de déclarer le nom de la table dans le formulaire.
- <!-- storage=extrapack -->
- <!-- table=spip_rubriques -->
- <form method="post">[(#ENV{_cfg_}|form_hidden)]
- <fieldset>
- <input type="hidden" name="id" class="cfg_id" value="#ENV{id}" size="15" />
- <label>Nom du contact :</label>
- <input type="text" name="nom_contact" />
- <br />
- </fieldset>
- <input type="submit" name="_cfg_ok" value="<:OK:>" />
- <input type="reset" value="<:Reset:>" />
- <input type="submit" name="_cfg_delete" value="<:Supprimer:>" />
- </form>
Explications :
Si l’on appelle le formulaire par ?exec=cfg&cfg=nom_du_fond&cfg_id=id_rubrique, alors le formulaire permet d’ajouter un nom de contact.
<!-- table=spip_rubriques --> : selectionne la table spip_rubriques.
Récupérer les valeurs :
#CONFIG{rubriques:#ID_RUBRIQUE/nom_contact} : Soit, de façon générique : #CONFIG{Nom_table:ID/nom_du_champ}