Paramétrage des squelettes

All contributions published for previous SPIP versions

Voici une proposition permettant de paramétrer assez simplement un squelette Spip...

...appliqué au squelette Sarka v1.1.1 (deux captures d’écrans ci-dessous).

Le nouvel onglet dans la page de configuration du site
La nouvelle page de configuration du squelette Sarka

Avant-propos

En essayant un certain nombre de squelettes, je me suis dit qu’il serait utile d’avoir la possibilité de les paramétrer.

Il ne s’agit évidemment pas de réécrire du code mais par exemple de:

  • choisir des couleurs
  • choisir d’afficher la liste des rubriques en haut, en bas, ... ou pas du tout
  • choisir le nombre d’articles récents à afficher
  • ...

C’est bien décrit dans l’introduction de cet article:

Le principe est simple, pour pouvoir distribuer des squelettes, il faut pouvoir configurer certaines petites choses: le numéro de la rubrique qui sert aux galeries, le nom du mot clef qui cache les articles, la couleur de fond du CSS, etc...

L’idéal pour cela serait de fournir à l’administrateur une page de configuration dans l’espace privée dans laquelle il puisse faire tous ces choix. Au lieu de l’obliger à aller modifier la structure de son site ou les fichiers du squelette.

Principe général

Chaque concepteur de squelette peut prévoir une page de configuration. Cette page permet de:

  1. modifier des variables globales utilisées dans le squelette (rubrique particulière, mot-clé ou groupe de mots-clés, nombre d’articles récents à afficher, ...);
  2. modifier les styles du squelette (couleurs, épaisseurs, tailles, espacements, “paddings”, ...);
  3. sauvegarder les paramètres ainsi définis.

Les variables globales du squelette sont rangées dans un fichier dans le répertoire du squelette [1]. Ce fichier porte toujours le même nom afin de permettre son chargement dans la partie Spip hors du squelette.

Si c’est un paramètre de style, on peut imaginer de régénérer la feuille de style à la volée mais une fois pour toute dans l’arborescence du squelette.

Du côté de Spip, on a:

  1. un onglet de plus qui apparaît dans la configuration lorsque le fichier de configuration du squelette existe;
  2. un canevas identique pour toutes les configurations de squelette afin:
    • d’assurer une présentation commune;
    • de charger toutes fonctions utiles;
    • de simplifier le fichier de configuration du squelette;
    • de charger une page dans le répertoire “ecrire” (je n’ai pas réussi à faire marcher la page de configuration dans le répertoire du squelette).

Description

Concernant le squelette

Usage de la configuration

(dossier_squelettes)/variables_globales_squelette.php” est le fichier qui définit les paramètres du squelette. Si il existe, il est chargé par “ecrire/mes_options.php”.

Exemple de contenu de “ecrire/mes_options.php”:

<?php

$GLOBALS['dossier_squelettes'] = "squelette-sarka-spip";

if ($f = find_in_path("variables_globales_squelette.php"))
	include_local ($f);

?>

Ces paramètres sont de ce fait disponibles partout, notamment dans le squelette. On y accède, soit, en PHP par $GLOBALS['sarka']['nombre_articles_recents'], soit, par une nouvelle balise #{}SKELVAR [2] à ajouter dans “(dossier_squelettes)/mes_fonctions.php [3]:

function balise_SKELVAR($p) {

	if ($a = $p->param) {
		$sinon = array_shift($a);
		if  (!array_shift($sinon)) {
		  $p->fonctions = $a;
		  array_shift( $p->param );
		  $nom = array_shift($sinon);
		  $nom = ($nom[0]->type=='texte') ? $nom[0]->texte : "";
		}
	}

	if (!$nom) {
		// cas de #ENV sans argument : on retourne le serialize() du tableau
		// une belle fonction [(#ENV|affiche_env)] serait pratique
		$p->code = 'serialize(\$GLOBALS[\'sarka\'])';
		$p->statut = 'html';
	} else {
		// admet deux arguments : nom de variable, valeur par defaut si vide
		$p->code = "\$GLOBALS['sarka'][$nom]";
		if ($sinon)
			$p->code = 'sinon('. 
			  $p->code .
			  compose_filtres_args($p, $sinon, ',') . 
			  ')';
		$p->statut = 'php';
	}

	return $p;
}

Je ne comprends pas tout des balises mais il faut remarquer le terme ’sarka’ qui apparaît deux fois et permet d’aller chercher la bonne table.

Modification de la configuration

(dossier_squelettes)/subconfig-squelette.php” permet à un administrateur du site de modifier interactivement la configuration du squelette.

(dossier_squelettes)/appliquer_modifs_config-squelette.php” assure la modification des fichiers nécessaires à la prise en compte des changements de paramètres:

  • (dossier_squelettes)/variables_globales_squelette.php”
  • (dossier_squelettes)/(les styles).css”
  • ...

Concernant Spip

On modifie “ecrire/inc_presentation.php” pour insérer un nouvel onglet dans la page de configuration. Cet insertion se fait à la condition qu’il existe un fichier “(dossier_squelettes)/subconfig-squelette.php” (deux nouvelles lignes après l’“onglet_interactivite”):
[...]

if ($rubrique == "configuration"){
		onglet(_T('onglet_contenu_site'), "configuration.php", "contenu", $onglet, "racine-site-24.gif");
		onglet(_T('onglet_interactivite'), "config-contenu.php", "interactivite", $onglet, "forum-interne-24.gif");
		if ($f = find_in_path("subconfig-squelette.php"))
		  onglet(_T('onglet_squelette'), "config-squelette.php", "squelette", $onglet);
		onglet(_T('onglet_fonctions_avances'), "config-fonctions.php", "fonctions", $onglet, "image-24.gif");
	}

[...]

C’est la seule modification au code de SPIP existant.

L’onglet ajouté ci-dessus appelle une page canevas, “ecrire/config-squelette.php”, qui elle-même insérera la page de configuration du squelette “(dossier_squelettes)/subconfig-squelette.php”. Ce canevas est du même type que ceux des autres pages de configuration [4].

En cas de modification des variables, ce canevas appelle “(dossier_squelettes)/appliquer_modifs_config-squelette.php” si il existe.

Installation

Attention: j’utilise les versions avec les suffixes “.php” ci-après.

Spip 1.8.2-e php Sarka 1.1.1 php
tar bz (1.6M) tar bz (21k)
tar gz (2.1M) tar gz (23k)
zip (2.4M) zip (49k)
  1. Installer Spip 1.8.2 e php
    • unzip -aX SPIP-v1-8-2-e-php.zip (<— les commandes que j’ai faites sous Linux)
    • mv -i SPIP-v1-8-2-e spip-test
    • (finir l’installation de Spip: machine, user, pass, base, ...)
    • cd spip-test
  2. Installer le squelette Sarka v1.1.1 php
    • unzip -aX squelette_sarka-spip-1.1.1-php.zip
    • mv -i squelette_sarka-spip-1.1.1/* .
    • rmdir squelette_sarka-spip-1.1.1
  3. Installer mon patch
    • tar xpvzf SPIP182e-patch-config-squelette.tar.gz

C’est tout... et ça marche!

Il ne reste plus qu’à (Yaqua :-)) étendre le module pour le squelette Sarka ou à l’écrire pour votre squelette.

Reste à faire

  • Séparer complètement ce qui est la modification de Spip et celle du squelette Sarka
  • Déplacer le fichier “ecrire/lang/subconfskel_fr.php” dans le répertoire du squelette
    idée: avoir un fichier “ecrire/lang/subconfskel_fr.php” chargeant “(dossier_squelettes)/lang/subconfskel_fr.php” si il existe.
Patch non testé ...
... de Spip 1.8.2 e (répertoire “ecrire”)
... du squelette Sarka v1.1.1 (répertoire “squelette-sarka-spip”)

SPIP182e-patch config-squelette.tar.gz
C’est un Tar Linux Gzippé. Il devrait être reconnu par WinZip et consorts.

Ci-joint les fichiers suivants:

  1. “ecrire/config-squelette.php”
    canevas général de la page de configuration du squelette
  2. “ecrire/inc_presentation.php”
    ajout de l’onglet de configuration du squelette
  3. “ecrire/lang/confskel_fr.php”
    les messages utilisés dans “ecrire/config-squelette.php”
  4. “ecrire/lang/subconfskel_fr.php”
    les messages utilisés dans “squelette-sarka-spip/subconfig-squelette.php”
  5. “ecrire/mes_options.php”
    définition du répertoire du squelette utilisé et chargement ses variables globales
  6. “squelette-sarka-spip/appliquer_modifs_config-squelette.php”
    comme son nom l’indique (première version fonctionnelle, non complète bien sûr)
  7. “squelette-sarka-spip/styles/impression.css”
    un style pour l’impression d’article [5].
  8. “squelette-sarka-spip/article.html”
    la page qui l’utilise
  9. “squelette-sarka-spip/mes_fonctions.php”
    le fichier qui définit la nouvelle balise
  10. “squelette-sarka-spip/subconfig-squelette.php”
    le paramétrage du squelette Sarka (très rudimentaire: deux variables pour l’instant)
  11. “squelette-sarka-spip/variables_globales_squelette.php”
    paramètre(s) Sarka (que j’ai ajouté)
  12. “squelette-sarka-spip/sommaire.html”
    la page qui utilise ces nouveaux paramètres.

Footnotes

[1On peut être tenté de ranger ces paramètres dans la table “spip_meta” mais, à mon avis, c’est une mauvaise option:

  1. ces paramètres font partie de la présentation et pas des données à publier;
  2. ce sont des données liées à un squelette particulier et si chaque squelette se met à ranger ses données dans la base (voire à créer sa propre base) ... ce sera vite le bazar et on ne s’y retrouvera bientôt plus du tout.

Le plus logique et le plus simple est que ces paramètres soient rangés dans un fichier particulier livré avec le squelette. Cela permet aussi de s’affranchir d’une phase d’initialisation du squelette.

[2Je me suis inspiré de la balise de Mortimer et de #{}ENV pour avoir des valeurs par défaut (très utile au cas où le fichier de variables se corromprait).

[3Cette balise est sans doute généralisable.

[4J’imagine que cela peut-être gênant pour SPIP et j’ai pris soin d’y mettre un avertissement. Est-ce suffisant?

[5Rien d’original. Toute amélioration est la bienvenue.

Discussion

2 discussions

  • 1
    Mortimer

    Je pense que ce que tu cherches, c’est le plugin Config (CFG).

    • oui, probablement un peu de CFG à la place de modifications dans SPIP. De façon à ce que lors du prochain changement de version de Spip, je ne soit pas bloqué.

    Reply to this message

  • Bonjour

    Voici donc un début de réponse à une attente de ma part.

    Je souhaite configurer le nombre d’articles de brèves ou de sites référencés, à afficher en fonction de l’actualité de mon site.
    Par défaut j’y procede en modifiant manuellement le “Sommaire” du squelette EVA-WEB-2 c’est pas cool.

    Je vais essayer de mettre en application cette proposition, mais je ne suis pas doué pour la programmation.

    Si un jour cette excellente idée était transformée en Plugin . . .

    Reply to this message

Add a comment

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite / PostgreSQL
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparait.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Who are you?
[Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom