var Phenix = function () {
Troll du Web depuis 1996

Modifier la carte d’identité d’un site #SPIP

Voici le premier tutoriel sur SPIP, et certainement pas le dernier vu comment, ce CMS est absolument magique.

Intro

Tous les sites SPIP sont livrés, par défaut, avec une carte d’identité : le titre du site, le slogan, l’email du webmaster, etc.
En gros par défaut, cela ressemble à cela :

Dans la plupart des cas, cela suffit largement au site. Toute fois dans certains cas, on voudrait étendre les possibilités de cette carte d’identité.

Éditer le formulaire

La première chose que l’on va faire, c’est éditer le formulaire pour ajouter les champs dont on à besoin. Le fichier se trouve dans prive/formulaires.

On copie donc configurer_identite.html et configurer_identite.php dans un dossier squelettes/formulaires. Cela a pour effet de les surcharger (voir la notion de chemin dans SPIP).

Ouvrez le fichier configurer_identite.html, vous y trouverez toute une série de li contenant des champs de formulaire.

Ajoutez-y votre champ, ici je vais ajouter un champ « téléphone de la billetterie » :

  1. #SET{name,billetterie_telephone}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}#SET{obli,''}
  2. <li class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
  3.         <label for="#GET{name}">Téléphone billeterie</label>
  4.         [<span class='erreur_message'>(#GET{erreurs})</span>]
  5.         <input type='text' class='text' name='#GET{name}' id='#GET{name}' value="#ENV{#GET{name}}" />
  6. </li>

Si vous retournez sur votre page, vous constaterez qu’un nouveau champ est disponible. En revanche, il ne fonctionne pas.

En effet, SPIP n’est pas au courant qu’il doit créer ce champ dans la base de données, il faut lui dire. Pour cela, ouvrez le fichier configurer_identite.php

Dans ce fichier vous trouverez 2 foreach de ce type (ligne 21 et 49) :

  1. foreach(array('nom_site', 'adresse_site', 'slogan_site', 'descriptif_site', 'email_webmaster') as $k)

Ajoutez dans le tableau votre nouveau champ :

  1. foreach(array('nom_site', 'adresse_site', 'slogan_site', 'descriptif_site', 'email_webmaster', 'billetterie_telephone') as $k)

Rien de plus à faire, votre champ est maintenant fonctionnel !

Créer la balise

Maintenant, on va créer la balise qui va avec ce champ, dans un fichier mes_fonctions.php (a mettre à la racine de votre dossier squelettes) :

  1. /*
  2. *   Balise #BILLETERIE_TELEPHONE
  3. */
  4. function balise_BILLETTERIE_TELEPHONE_dist($p) {
  5.     $p->code = "\$GLOBALS['meta']['billetterie_telephone']";
  6.     return $p;
  7. }

Voilà, il ne reste plus qu’à utiliser #BILLETERIE_TELEPHONE où bon vous semble dans vos squelettes SPIP. Bien sûr tous les filtres fonctionneront également !

2 Messages

  • Modifier la carte d’identité d’un site #SPIP

    Le 10 août 2013 à 04:40 par .Gilles

    Salut,

    tu peux aussi utiliser un pipeline pour modifier le formulaire sans reprendre le code d’origine.
    Plusieurs options : editer_contenu_objet (http://programmer3.spip.net/editer_contenu_objet)
    Mais perso je ferais comme le plugin nospam qui utilise le pipeline formulaire_fond qui permet de rajouter ce qu’on veut à un formulaire.

    Extrait du fichier qui définit les pipelines :

    1. /**
    2.  * Ajouter le champ de formulaire 'nobot' au besoin
    3.  *
    4.  * @param array $flux
    5.  * @return array
    6.  */
    7. function nospam_formulaire_fond($flux) {
    8.         // determiner le nom du formulaire
    9.         $form = $flux['args']['form'];
    10.         if (in_array($form, nospam_lister_formulaires())) {
    11.                 // on ajoute le champ 'nobot' si pas present dans le formulaire
    12.                 nospam_inserer_nobot($flux['data']);
    13.         }
    14.         return $flux;
    15. }
    Répondre à ce message
    • Modifier la carte d’identité d’un site #SPIP

      Le 11 août 2013 à 00:33 par Phenix

      Hello,

      Dans le cas d’un plugin, c’est effectivement la méthode a privilégier pour la compatibilité.

      Dans le cadre d’un squelette je pense que c’est mieux de faire une surcharge :

      • C’est moins obscure pour une éventuel personne qui modifie le site après toi.
      • C’est dans la logique des squelettes.
      • C’est beaucoup plus simple.

      Après il y a aussi le fameux « Keep it simple » :)

      Répondre à ce message