spipzine

Accueil > Ateliers > Bricolage > Installer le Switcher de squelettes

Squelettes alternatifs pour Spip 1.9

Installer le Switcher de squelettes

On en rêvait... Le voilà enfin !

vendredi 9 juin 2006, par Alexandra Guiderdoni, comradE Ogilvy

Plus besoin de contributions compliquées via des mots clés, ou de bidouilles complexes et variées pour mettre en place sur son site plusieurs jeux de squelettes. Un seul site avec autant de squelettes alternatifs que l’on désire qui changent sur un clic, c’est désormais possible.

Ah oui, mais comment ? J’espère que je vous ai mis l’eau à la bouche, et donné l’envie de passer sur la 1.9 pour tester tout de suite cette formidable possibilité.

IMPORTANT : Pour SPIP 1.9, le plugin Switcher de squelettes permet de changer de squelette en un clin d’œil. Nous laissons le reste de l’article, devenu obsolete, à titre purement informatif.

Le Plugin Switcher

Télécharger le plugin Switcher pour SPIP 1.9

- Installer le dossier switcher dans le répertoire plugins à la racine du site.

- Allez dans http://domaine.net/ecrire/?exec=admin_plugin

- Activer le Switcher en le cochant.

Ce plugin ajoute un formulaire à liste déroulante en javascript sur tous les squelettes de la partie publique du site, permettant de basculer entre les squelettes dist, ceux d’un dossier squelettes, et… et l’ensemble des squelettes contenus dans le répertoire nommé squelettes-test où chaque jeu de squelettes doit être dans un sous-répertoire.

- Pour personnaliser le style par défaut du formulaire, allez dans le fichier switcher_fonctions.php.

- Pour personnaliser le nom du repertoire de squelettes alternatif, allez dans inc/switcher_config.php et indiquez le nom du répertoire dans :

$repertoire_squelettes_alternatifs ='ce_que_vous_voulez';

- De même, on peut spécifier que seuls les administrateurs du site auront accès au basculement de squelette en mettant à true la variable suivante, toujours dans inc/switcher_config.php :

$afficherSeulementPourLesAdmins=TRUE;

Une démo est disponible ici :

http://spiptest.africa-web.org/


Archives

Parce qu’un exemple est toujours plus parlant qu’un long discours, je vous renvoie tout de suite vers des exemples concrets sur spip.net où sont utilisées la fraichdist (la nouvelle dist), hbones un squelette générique basé sur les microformats, et le squelette traditionnel de la doc tel que vous le connaissez :

- http://www.spip.net/?var_skel=fraich
- http://www.spip.net/?var_skel=hBones
- http://www.spip.net/?var_skel=comme...

Vous pouvez donc constater que tout passe par ce paramètre de ?var_skel= passé dans l’url. Le secret de ce petit miracle est un simple fichier switcher.php et une ligne de code à ajouter dans mes_options.php. [1].

Le code de cette petite merveille est consultable sur la zone :
http://trac.rezo.net/trac/spip-zone...
Mais il n’est pas inconcevable de penser qu’il puisse un jour être intégré à SPIP sous forme de plugin.

Voici un pas à pas de ce qu’il faut faire pour aboutir au même résultat sur votre site, et pouvoir tester autant de jeux de squelettes que vous souhaiterez sans avoir à définir à chaque fois le $dossier_squelettes de ecrire/mes_options.php comme l’on faisait précédemment.

- 1ère étape : Rendez-vous sur la page http://zone.spip.org/trac/spip-zone... et enregistrez sous le titre switcher.php.
Placez ce fichier dans le répertoire /ecrire.

- 2ème étape : Éditez le fichier mes_options.php (également dans le répertoire /ecrire) ou créez-le s’il n’existe pas, et ajoutez-y le code suivant [2] :

<?php
include _DIR_RESTREINT.'switcher.php';
?>

- 3ème étape : Il s’agit à présent de personnaliser le nom du cookie de votre squelette et les noms et chemin des dossiers squelette alternatifs dans le fichier switcher.php. Pour cela, vous aurez à les insérer entre les parenthèses de la ligne $squelettes_alternatifs = array(); sous la forme suivante : 'nom du cookie' => 'chemin du squelette'

Par exemple :

$squelettes_alternatifs = array(
'fraich' => 'fraichdist'
'test1' => 'squeletest/squeletest1'
'test2' => 'squeletest/squeletest2'
'testmix' => 'fraichdist:squeletest1'
);

Dans les deuxième et troisième lignes, on appelle deux répertoires squelettes squeletest1 et squeletest2 rangés dans un répertoire de test général placé à la racine : /squeletest. Dans la dernière ligne, le cookie testmix appellera squeletest1 si fraichdist n’est pas trouvé. Notez en ce cas la séparation  :.

- 4ème étape : Vider votre cache, et ensuite tapez l’url de votre site suivie de l’appel ?var_skel= complété par le nom du cookie en paramètre :

Pour revenir au squelette par défaut, il suffit de laisser le paramètre vide :

Attention : le nom du cookie qui appelle le squelette peut être different du nom du répertoire de votre squelette, mais c’est bien lui qui doit être passé en paramètre. Dans le code proposé ci-dessus dans le switcher, le squelette appelé par le cookie ’fraich’ est dans un répertoire qui s’appelle /fraichdist et qui se trouve à la racine du site.
Par ailleurs, les chemins des squelettes devront être indiqués en partant de la racine (dossier spip).

Grâce au cookie, l’effet est persistant : une fois qu’un squelette spécifique a été appelé, c’est lui qui s’affiche, jusqu’à ce que vous en sélectionniez un nouveau.

Comme le paramètre est passé dans l’url, vous pouvez facilement permettre à vos utilisateurs de switcher par le biais de liens, ou encore d’un menu déroulant…

Les lignes suivantes créent un telle liste permettant de switcher en restant sur la même page :

<ul>
<li><a href="[(#SELF|parametre_url{var_skel,fraich})]">fraich</a></li>
<li><a href="[(#SELF|parametre_url{var_skel,test1})]">test1</a></li>
<li><a href="[(#SELF|parametre_url{var_skel,test2})]">test2</a></li>
<li><a href="[(#SELF|parametre_url{var_skel,testmix})]">testmix</a></li>
</ul>

Igor a mis en place dans son coin web un formulaire de sélection de squelettes avec select que l’on peut voir sur sa page d’accueil :

Voici le code qu’il propose avec un léger Javascript.

- Javascript (à insérer dans le Head de la page) :

<script type="text/javascript">
//<![CDATA[
function gotof(url) {
window.location=url;
}//]]>
</script>

- Le code du formulaire :

<div>
<form action="" method="post">
<select name="sommaire" id="sommaire" onchange="gotof(this.options[this.selectedIndex].value)">
<option selected="selected" value="">Choisir</option>
<option value="[(#SELF|parametre_url{var_skel,fraich})]">Squelette Fraichdist</option>
<option value="[(#SELF|parametre_url{var_skel,test1})]">Squelette Test 1</option>
<option value="[(#SELF|parametre_url{var_skel,=})]">
Retour au squelette par defaut
</option>
</select>
</form>
</div>

Et voilà le résultat (inactif car les squelettes alternatifs cités ne sont pas installés) :

Merci à Igor pour cette intéressante contribution.

Conclusion :

Un grand merci à ceux qui ont permis cela.


[1Si le fichier mes_options.php n’existe pas, il faudra le créer à cette occasion.

[2Si le fichier existe déjà, omettre les déclarations php <?php} et {?> qui y figurent déjà.

Messages

  • Bonjour, je viens d’installer le switcher qui n’a hélas aucun effet sur mon site (en local). Comment 1) déclarer le squelette par défaut et 2) ré-initialiser le site pour qu’il pointe sur ce squelette.

    Précision : j’ai supprimé la ligne $GLOBALS[’dossier_squelettes’] = ’monsquelette’ ; du fichier ecrire/mes_options.php, évidemment..

    Merci d’avance !

    Jean-Luc

    • Le squelette par défaut peut être "squelettes", ce qui te permet de ne rien spécifier dans mes_options.php.
      Ensuite dans le swticher.php, faut enlever l’étoile de commentaire.

      <?php
      $squelettes_alternatifs = array (
      'skel1' => 'squelette_un',
      'skel2' => 'squelette_deux',
      'skel3 => 'squelette_trois',
      );
      ?>

      Soit le cookie qui appelle le squelette et le nom du squelette.
      Enfin penser à vider le cache.
      Tape ton domaine.net/ ?var_skel=skel1 par exemple (?var_squel= et le nom du cookie défini dans le switcher)
      Tu peux aussi user du formulaire.
      Il faut bien sur être en SPIP 1.9
      Y a pas de raison pour que ca ne fonctionne pas. Tiens nous au courrant.

    • Il m’a fallu vider le cache plusieurs fois, puis le switcher s’est mis à marcher.. Plutôt bien, d’ailleurs ! Félicitations pour ce petit accessoire bien pratique !

      Jean-Luc

  • Il semble qu’il faut mettre une virgule comme ceci :
    $squelettes_alternatifs = array(
    ’fraich’ => ’fraichdist’,
    ’test1’ => ’squeletest/squeletest1’,
    ’test2’ => ’squeletest/squeletest2’,
    ’testmix’ => ’fraichdist:squeletest1’
    )

    sinon cela ne fonctionne pas du tout. De plus, chez moi j’ai un : Warning : Cannot modify header information - headers already sent by (output started at /spip/ecrire/mes_options.php:1) in /spip/ecrire/switcher.php on line 24
    ceci dés que je met ?var_skel

    Pour terminer ou met on les lignes de code du tableau déroulant ?

    merci d’avance

  • Bonjour, cet article me parait très intéressant, néanmoins j’ai du mal à installer le switcher... Je m’explique : J’installe le dossier switcher dans plugins, je me rend sur l’interface d’administration, je coche la case, jusque la tout va bien. Mais lorsque je reviens sur la partie publique de mon site, rien a changé... Je me suis donc dit qu’il fallait purger le cache, ce que je fais immédiatement. Je tourne sur mon site (aucun changement visible), je clique sur contribuer, je remplis mon login et mon mot de passe (à ce moment la je vois le menu en haut à gauche). Je suis renvoyé sur une page blanche ou est marqué "302 Found Click here. " je clique et me voila sur une page d’adresse : http://monsite/spip.php?action=cookie, elle est toute blanche, on ne peut voir qu’en haut à gauche "302 Found Click here. " je clique et me voila sur une page de même contenu mais d’adresse : http://wellor.free.fr/ecrire/?bonjour=oui Je clique et me revoila sur la page où on me demande mon login, a la différence qu’est marqué : "problème de cookie Pour vous identifier de façon sûre sur ce site, vous devez accepter les cookies.

    Veuillez régler votre navigateur pour qu’il les accepte (au moins pour ce site). "

    et rebelotte si je rettente d’envoyer login et mot de passe...

    A noter :
    - Si je supprime mon dossier plugin (qui ne contient que le switcher), tout repare normalement
    - Je suis bien sous Spip 1.9

    Merci d’avance

  • L’installe est facile et fonctionne bien

    par contre quand je choisi un squelette, le choix ne reste pas, il faut à chaque fois que je rechoisisse le squelette ; Spip ne se souvient pas du squelette sélectionné.

    J’ai loupé quelque chose ?

    Il est question de cookies, j’ai parcouru les sources, mais n’ai pas le courage et le temps d’approffondir.

    Merci de votre aide

  • Bonsoir et félicitatiuon pour ce plugin, néanmoins j’ai du mal à installer le switcher...

    Je m’explique :

    1/Je créé un repertoire squelettes-test à la racine, j’installe des habillages en sous repertoire, exemple alternatives, sarka spip, (en fait un dizaine de squelettes) 2/J’installe le dossier switcher dans plugins, je me rend sur l’interface d’administration, je coche la case,je valide, vide mon cache jusque la tout va bien.

    Mais lorsque je reviens sur la partie publique de mon site, j’ai effectivement une barre déroulante avec dist ou default, mais je n’ai pas alternatives ou sarka ou autres lorsque je clique sur dist ou defaut rien ne se passe.

    lorsque je veux recalculer ma page j’ai ce message Fatal error : Call to undefined function : accesrestreint_articles_accessibles_where() in /mnt/141/free.fr/a/c/s.tamelghaghet/SPIP-v1-8-2-e/ecrire/public/composer.php(48) : eval()’d code on line 74

    merci de votre aide, j’en ai reellement besoin dans le cadre du fonctionnement de mon site.

  • Cela fait 6 fois que je recommence l’installation de spip parceque après avoir activé switcher, j’ai peux plus accéder à mon site. Je vois vraimant pas ce qui va de travers. spip 1.9

  • Bonjour,

    Je n’ai pas réussi à faire fonctionner votre excellent plugin à partir de SPIP 1.9.2... En creusant un peu il me semble que le cookie spip_skel n’est pas pris en charge ? En savez vous un plus à ce propos ?

    Merci

    Patrick

  • Je viens de modifier un peu ce plugin, de manière à ce qu’on puisse le configurer depuis mes_options.php sans toucher aux fichiers du plugin :

     define('SWITCHER_DOSSIERS_SQUELETTES', 'rep1:rep2:dist');
     define('SWITCHER_AFFICHER', false);

    Par défaut comme avant seuls les admins voient le menu ; si on veut que tout le monde le voie, il suffit de mettre

     define('SWITCHER_AFFICHER', true);

    L’idéal serait d’avoir ça en cfg (quand cfg sera intégré ce sera le pied !).

    J’espère que ça ne casse pas trop

  • Le cookie utilisé actuellement n’est valide que pendant la session.

    Pour que le cookie soit valide jusqu’au passage suivant du visteur, il suffit de modifier une ligne du fichier switcher.php :

    spip_setcookie(’spip_skel’, $_COOKIE[’spip_skel’] = $_GET[’var_skel’], NULL, ’/’) ;

    par :

    spip_setcookie(’spip_skel’, $_COOKIE[’spip_skel’] = $_GET[’var_skel’], time()+(365*24*3600), ’/’) ;

  • Bonsoir ; tous d’abord présentons notre spip avant la question :

    SPIP 1.9.3 dev SVN [10183] ; hébergement "ZMWS".

    Notre question ; sur le squelette de la dist, le switcher s’install sans pb ’ j’en profite pour vous dire merci) par contre comment faire pour que le menu ce décale légérement sur la gauche.

    Lorsque l’on met une image la fléche mord dessus.........

    merci

  • Absolument indispensable ce plugin pour développer/améliorer des squelettes en live et sans gêner la vie publique du site. Je suis pas un accroc du plugin, mais celui là m’a fait gagner des heures dans le développement de la nouvelle version de mon site. Mille mercis.

  • Bonsoir,

    Je me suis excité plusieurs fois en vain sur ce plug-in, j’avais l’impression qu’il ne fonctionnait pas ..... et de dépit, je sautais à l’usage de liens directs sur les répertoires....

    mais sous Windows, c’est moins facile ; alors j’ai replongé, et finalement je vous propose les deux modifications suivantes :

    switcher.php // la doc indique deux points pour séparer la liste... à mettre en explode !

    [11] foreach(explode(’ :’,SWITCHER_DOSSIERS_SQUELETTES) as $skel)

    // et j’avais besoin de plus de possibilités (sans omettre des alternatifs)

    [14] // attention aux accolades ...

    }

            /* else */

            if (is_dir($repertoire_squelettes_alternatifs)) {

    pour remplacer la seule ligne
    [14]

            elseif (is_dir($repertoire_squelettes_alternatifs)) {

    jusqu’aux prochaines decouvertes d’erreurs (a cette heure, c’est encore possible !)

    J’aurais encore une amélioration a espérer ; c’est de voir explicitement les sous-répertoires de // Squelettes supplémentaires : tous les répertoires contenus dans $repertoire_squelettes_alternatifs en l’affichant en prefixe... Mais cela sera pour une prochaine fois peut-etre !

    Bonne nuit !

    Yx

  • Il m’a fallu vider le cache plusieurs fois, puis le switcher s’est mis à marcher.. Plutôt bien, d’ailleurs ! Félicitations pour ce petit accessoire bien pratique !

    Voir en ligne : http://www.afif.ws/sahat