Préambule
Cet article ne prétend pas fournir un schéma parfait. Vos commentaires nous aideront à l’améliorer, il va donc évoluer grâce à vous, tenez-en compte à la lecture ;-)
la balise #DOSSIER_SQUELETTE
La balise #DOSSIER_SQUELETTE est une nouveauté de spip 1.8.2 (cf. « SPIP 1.8.2 » sur spip.net).
Dans les squelettes spip, les liens vers la feuille de style ou les images doivent être définis depuis la racine du site, ce qui obligeait jusqu’a présent à mettre le nom du répertoire du squelette « en dur » dans le code html, par exemple un appel à la feuille de style mes_styles.css placée dans le répertoire mon_squelette/css se faisait de la façon suivante :
<link href="mon_squelette/css/mes_style.css"... />
La balise #DOSSIER_SQUELETTE sert à remplacer cette écriture du nom de dossier afin de rendre les squelettes faciles à diffuser, ainsi on écrira maintenant :
<link href="#DOSSIER_SQUELETTE/css/mes_style.css"... />
et le résultat sera le même (voir plus loin comment définir le dossier des squelettes).
Pour continuer sur la feuille de style, n’oubliez pas d’indiquer dedans le chemin vers les images éventuellement utilisées (fond de page, puces...) de façon « relative ».
Dans un dossier squelettes ainsi structuré :
mon_squelette
css
mes styles.css
images
fond.png
article.html
rubrique.html
[...autres fichiers...]
On n’aura qu’à écrire dans le fichier mes-styles.css l’appel à l’image de fond de cette façon :
body {
background-image: url(../images/fond.png);
}
Ainsi, peu importe le nom du dossier squelette, si un fichier squelette peut retrouver le chemin de sa feuille de style (via #DOSSIER_SQUELETTE), la feuille de style, elle, retrouvera toujours son image.
le fichier page.php3
Le fichier « page.php3 », à la racine du site, est un appel de squelette, dont le $fond
n’est pas défini ; ce fond peut donc être passé en URL d’appel. Ainsi on peut utiliser ce fichier pour tous les squelettes qui n’ont pas de fichier d’appel en propre (comme « article.php3 » pour les articles, etc.).
Par exemple, au lieu de créer un fichier galerie.php3 à la racine du site spip, on placera le lien suivant dans les fichiers html : page.php3?fond=galerie
et on aura le fichier galerie.html bien rangé dans le dossier mon_squelette.
Le système marche également pour tous les fichiers inclus, ainsi <INCLURE(galerie.php3){id_article}>
devient <INCLURE(page.php3){fond=galerie}{id_article}>
et permet au webmaster de ne pas créer le fichier galerie.php3.
Notez que l’on ne peut pas appeler un $fond
qui se trouverait dans un sous-répertoire du dossier de squelettes.
le dossier squelettes
Spip va chercher les squelettes dans le dossier nommé squelettes (attention au s final), s’il ne trouve rien il cherche à la racine du site, puis dans le répertoire dist
On peut également nommer son répertoire de squelettes comme on veut si on le signale à spip dans le fichier mes_fonctions.php3 :
$GLOBALS[ 'dossier_squelettes' ] = "mon_squelette" ;
(cf. l’article de spip.net à ce propos).
Attention !
Comme on peut placer le fichier mes_fonctions.php3
dans le dossier de son squelette, nous vous conseillons plutôt de définir évidement $dossier_squelettes
dans ecrire/mes_options.php3
. Ainsi, on peut fournir un squelette avec une architecture plate (i.e. un seul niveau de répertoire).
(cf. « Les variables de personnalisation »).
Notre objectif est de mettre tous les fichiers nécessaires au fonctionnement du site dans un même répertoire. Ainsi il sera très facile de partager vos squelettes avec d’autres personnes et d’autres sites.
On y met donc :
- tous les fichiers html des squelettes ;
- les formulaires modifiés ;
- le ou les feuilles de styles ;
- le ou les fichiers javascripts ;
- les images des squelettes ;
- le ou les fichiers de langues persos (cf. « Internationaliser ses squelettes, méthode des fichiers de langues).
Remarque sur les fichiers inclus
Les fichiers inclus dans les squelettes peuvent aussi être dans ce répertoire, ainsi que leur fichier php3 correspondant. La « norme » adopté par de nombreux contributeurs est de nommer leurs fichiers inclus inc-truc, on a ainsi dans le dossier des squelettes les couples inc-truc.php3 et inc-truc.html et ces fichiers sont appelés dans les squelettes via le code : <INCLURE(inc-truc.php3){parametre}>
.
On peut également les mettre dans des sous répertoire si on précise le chemin d’accès dans le fichier d’appel php3 (ça complique un peu, mais pour les fanas du rangement autant le préciser) .
Exemple :
Tous mes fichiers inclus sont dans un sous-dossier inclusions, mes php3 sont dans le même dossier et de la forme :
<?php
$fond = "inclusions/nom_du_fichier";
$delais = 24 * 3600;
include ("inc-public.php3");
?>
On peut aussi utiliser le fichier page.php3 évoqué plus haut.
les fichiers fond_fonctions.php3
Il est possible de gérer mes_fonctions.php3 via des squelettes nommés fond_fonctions.php3, ou fond correspond au nom du squelette. Ce fichier contient des filtres spip, comme le fichier mes_options.php3, mais ils ne peuvent être utilisés que par un seul squelette. Par exemple si article_fonctions.php3 existe et se trouve dans le dossier des squelettes, alors il sera appelé pour le squelette article.html.
Cette possibilité peut s’avérer pratique parfois pour des filtres n’étant pas communs à tous les squelettes, et peut, par conséquent, permettre de « distribuer » son squelette sans manipulation du fichier mes_fonctions.php3 par l’utilisateur.
Pensez aux utilisateurs étrangers
Même si on ne développe pas un squelette multilingue, il se peut très bien que des utilisateurs étrangers veuillent installer votre squelette pour un site dans leur langue.
Vous n’avez pas à être expert des langues pour fournir des squelettes pouvant être utilisés dans une autre langue. SPIP fournit une bonne collection de chaînes localisées que vous pouvez utiliser dans votre squelette. Vous en trouverez une liste sur la page ecrire/lang_raccourcis.php3 de votre site.
Ainsi, par exemple, au lieu de mettre « Envoyer un message » en dur dans
votre squelette, vous utiliserez la « chaîne » <:envoyer_message:>
et SPIP se chargera de faire la traduction dans la langue du site.
Il faut aussi penser à bien utiliser les filtres de date de SPIP qui garantissent que la date est écrite avec les bonnes conventions selon la langue.
Bilan
Il ne nous reste plus à la racine du site que le fichier mes_fonctions.php3 - si nécessaire - fichier qui contient les filtres et fonctions liées au squelette (ainsi que le nom du dossier contenant les squelettes si besoin).
L’installation se résume alors, pour l’utilisateur :
- à déposer le répertoire du squelette sur son site via ftp;
- et mettre à jour le fichier mes_fonctions.php3 si besoin.
Pour aller plus loin : Des variables dans la feuille de style
Le système des squelettes spip ne se limite pas aux fichiers html. On peut créer des squelettes de feuille de style ou de fichiers javascript, pour y utiliser des informations de la base de données. Voyons un exemple avec une feuille de style qui utiliserait des boucles spip :
1. Créer un fichier stylecss.php3 un peu spécial
<?php
$fond = "stylescss";
$delais = 2 * 24 * 3600;
$flag_preserver = true;
@header("Content-type: text/css");
include ("inc-public.php3");
?>
- Pour une feuille de style on a la ligne : @header("Content-type: text/css");
, selon le type de fichier généré vous devez changer cette ligne.
2. Créer un fichier stylecss.html contenant votre feuille de style, on peut maintenant y ajouter des boucles si besoin.
3. Et comme ce fichier se trouve dans le dossier des squelettes, l’appel à cette feuille de style est alors : <link href="#DOSSIER_SQUELETTE/stylecss.php3"... />
N’oubliez pas de commenter vos fichiers !
Et enfin, pour finir une dernière balise peu documentée car toute nouvelle, la balise #REM qui permet de mettre des commentaires dans le squelette, ces commentaires n’apparaissant pas en ligne. Utilisation :
[(#REM) ici mon commentaire expliquant ce que fait ma boucle]
En abuser permet d’aérer son code et aidera les débutants qui voudront personnaliser à leur sauce votre squelette.
Discussions par date d’activité
16 discussions
Je dois dire que cet article m’a bien aidé à adapter mon squelette pour une installation encore plus facile, donc un grand merci avec compliments aux rédacteurs et aux développeurs pour toutes ces bonnes initiatives.
Bien que n’ayant pas encore diffusé la prochaine version de mon squelette, voilà un retour d’expérience :
- avec le s pluriel de squelettes, j’ai d’abord pensé que ce répertoire devait accueillir plusieurs squelettes, donc qu’il fallait créer un sous répertoire pour le mien, ce qui ne marche pas (comme indiqué dans la doc je dois dire, mais je suis passé à coté la 1re fois)
- il est dommage que mes_fonctions.php3 ne puisse pas rentrer dans le dossier squelettes. Pourquoi Spip ne va-t-il pas le chercher à cet endroit ?
A part ça, tout marche magnifiquement ! Ca va me permettre de simplifier le configurateur lié à mon squelette (et pourquoi pas le rendre générique pour la communauté ?)
C’est sa fonction : toutefois, il convient de préciser à spip le nom de ce sous-répertoire. En effet, comment peut-il le deviner sinon ?
Au contraire, c’est expliqué ici
On se comprend mal car je dis que GLOBALS[ ’dossier_squelettes’ ] = "mon_squelettes" ; n’a pas marché avec mon_squelette=squelettes/epona ce qui confirmerait ce qui est écrit ici même :
« Notez que l’on ne peut pas appeler un $fond qui se trouverait dans un sous-répertoire du dossier de squelettes ».
Certes, il y a ambiguité à savoir si
- "dossier de squelettes" renvoie à "squelettes" ou à "squelettes/epona" ?
- "mon_squelette" renvoie à "epona" ou "squelettes/epona ?
Excellent, je vais essayer ça. Il faudrait insérer l’information dans l’article, non ?
C’est un problème auxquels on réfléchit actuellement. Mais à priori, si tu utilises epona, tu ne vas pas utiliser en même temps un autre jeu de squelettes.
Donc ce qu’il faut faire (et que tu peux faire), c’est de ficher :
$GLOBAL['dossier_squelette'] = 'squelettes/epon';
tu as raison, on est jamais assez précis. :)
$dossier_squelette = "squelettes/epona";
dansecrire/mes_options.php3
à partir de là, article.html, styles.css et mes_fonctions.php3 devront se trouver dans « squelettes/epona » alors que le squelette « nono » sera dans
squelettes/nono
.Pour distribuer son squelette : un fichier epona.zip, ou nono1-7-8.zip contenant tous les fichiers installables au même endroit, sans (trop de ?) complication... à priori, tester les squelettes n’écraserait plus le fichier des filtres, les modules de langues, et permettrai un rangement quasi naturel des ressources...
ça marche effectivement très bien comme ça.
Merci.
essai ca ! en terme de squelette ca va plaire...
http://jack95440.labrute.fr
Répondre à ce message
Bonjour,
J’ai du louper une étape de la config ou de spip mais je n’arrive pas à faire fonctionner cette contrib avec les squelettes spécifiques.
Je m’explique ; ça fonctionne avec les squelettes classiques (ceux inclus par défaut dans spip comme article, rubrique...) mais pas avec les squelettes spécifiques (par ex, ma_page.php3,html).
J’obtiens un 404 sur http://urlmonsite/mapage.php3 alors que mapagephp3,html est bien présent dans le dossier des squelettes et que mes_options.php3 contitent bien l’affectation $dossier_squelletes (la preuve en est que les autres squelettes fonctionnent).
Merci de votre aide.
le gabarit (fichier html) est bien à mettre dans le répertoire du « dossier_squelettes », mais pas le script d’appel qui bien entendu doit se trouver à l’endroit où tu comptes le chercher.
ex :
par contre, tu peux seulement créer un gabarit et l’appeler avec
page.php3?fond=mapage
ainsi, tu ne créés pas de script d’appel spécifique...Merci pour cette réponse rapide :) ça fonctionne maintenant avec le script d’appel à la racine.
Cependant l’astuce qui me satisfaisait complètement est bien sûr celle avec page.php3 ?fond=ma_page puisqu’elle permet de ne rien copier hors du dossier de squelettes.
Mais j’ai l’erreur « fond interdite » (meme en local), après quelques recherches j’ai vu que c’est un bug de spip corrigé mais uniquement dans le svn semble-t-il et pas sur 1.8.2d (voir lien).
Je vais essayer avec la version de dev.
Merci.
Pour finir ca fonctionne en modifiants les fichiers page.php3 et ecrire/inc_version.php3 comme précisé sur le diff (voir lien) sur spip 1.8.2 (testé en local et chez free).
Il n’y a que 2 fichiers à remplacer c’est pas la mort en attendant la prochaine version stable.
En espérant que ces messages auront servis à d’autre...
thx
glop :) Merci à toi pour cette précision !
Bonjour,
J’ai le problème inverse :
Quand j’utilise un couple /spip/mapage.php3 + /spip/squelette/mapage.html tout fonctionne trés bien.
Quand je veux passer par page.php3 que j’ai modifier pour appliquer le diff j’obtiens systèmatiquement la page 404 sur un lien du type page.php3 ?fond=mapage
Merci de votre avis
En effet, cette précision (modification des deux fichiers page.php3 et ecrire/inc_version.php3) est TRES UTILE pour faire fonctionner cette contrib sous Spip 1.8.2d. Merci.
Même probleme. Aprés plusieurs recherches, j’ai fini par mettre un print dans la fonction find_in_path, et là horreur, je me suis apperçut que le fichier mes_fonctions(où est défini le nom de mon répertoire de squelettes) était inclus bien aprés les appels à mon .html. Donc aucune chance qu’il le trouve.
J’ai finalement résolu le problème grace au conseil donné plus haut : mettre la ligne
$GLOBALS[’dossier_squelettes’] =’*****’ ;
dans /ecrire/mes_options.php3
au lieu de /mes_fonctions.php3
Et ça marche. Je pense qu’il faudrait corriger l’article pour éviter que d’autres n’aient le même probleme.
pour info, voici la liste des tentatives d’appels lorsque je tente d’appeler
page.php3 ?fond=tuto
avec jfskel comme répertoire de squelettes
et tuto.html défini dedans.
# squelettes/tuto.html
# dist/tuto.html
# formulaires/tuto.html
# ./inc-formulaire_admin.php3
# squelettes/inc-formulaire_admin.php3
# dist/inc-formulaire_admin.php3
# formulaires/inc-formulaire_admin.php3
# ./mes_fonctions.php3
# jfskel/404.html
# ./404.html
# squelettes/404.html
# dist/404.html
# jfskel/local.php3
# ./local.php3
# squelettes/local.php3
# dist/local.php3
# formulaires/local.php3
....
c’est fait, merci pour le rappel.
Répondre à ce message
Bonjour
Dans mes squelettes je veux faire un menu avec les liens vers des articles specifiques - article 12 par example, j’utilise urls propres2 et je veux que le lien donne l’url propres 2 avec le titre comme ’title’ pour le lien.
mais j’ai des editeurs qui change les titres, de ca je peux pas faire des liens statiques comme de ca je cherche un moyen a faire les liens avec des balises en spip.
Merci pout toute aide !
:)
Répondre à ce message
Bonjour !
comment obtient-on une structure identique à celle de cette article : l’article principal avec les titres des parties secondaires sur le côté à gauche ?
Je ne savais pas qu’il était possible de diviser ainsi un article. Commentca macrche ?
merci.
Christophe
Ok, j’ai trouvé la réponse :
Répondre à ce message
Bonjour tout le monde,
Maintenant que la 1.9 pointe le bout de son nez j’attire l’attention des lecteurs sur les nouvelles pratiques :
- #CHEMIN à la place de #DOSSIER_SQUELETTES
- INCLUREarticlelang au lieu de INCLURE(fond=article)lang
- spip.php au lieu de page.php3
- disparition du .php3 correspondant au .html
- ...
Répondre à ce message
Bonjour je ne savais pas où poster ce message...
j’ai un soucis je suis en train de créer mon propre squelette et j’ai supprimé le dossier dist pour faire vraiment ce que je veux j’adore spip le soucis c ’est que derrière toutes mes pages il reste en haut à gauche :
Espace privé Recalculer cette page
je ne sais pas d’où cela vient car dans mes css il n’y a rien n’y dans inc_public.php3 pouvez vous m’aidez ?
merci beaucoup c’est vraiment idiot mais je ne vois vraiment pas :p
cordialement
Salut,
la réponse est dans la documentation en ligne : http://www.spip.net/fr_article1825.html
Répondre à ce message
Bonjour
Je fais un squelette, dont les fichiers HTML sont dans ./squelettes/cafcrra/
Le fichier CSS utilisé est dans ./squelettes/cafcrra/CSS/sommaire.css
Dans mon fichier sommaire.html, j’appelle mon fichier CSS par #DOSSIER_SQUELETTE/CSS/sommaire.css
J’ai bien un fichier mes_options.php3, dans /ecrire/, qui contient la ligne :
$dossier_squelettes=« ./squelettes/cafcrra » ;
Mais ca ne marche pas... Le fichier CSS n’est pas appellé, car SPIP remplace #DOSSIER_SQUELETTE par rien. Le fichier CSS appellé est donc /CSS/sommaire.css, ce qui ne donne rien.
Que faire ?
Merci d’avance
Répondre à ce message
Bonjour,
J’essaye péniblement de mettre en pratique l’astuce sur les CSS mais sans succès jusqu’à maintenant. Mon but est de trouver une façon plus élégante qu’en considérant les CSS comme du HTML et en utilisant le couple PHP3/HTML de façon classique sans le @header (ce que j’ai su faire marcher).
Donc j’ai plusieurs interrogations sur l’article :
Voila et merci d’avance pour votre aide.
A+
Eric
Répondre à ce message
C’est pas un peu faux cela :
Pour ma part, je n’arrive absolument pas à faire fonctionner ce lien avec le fichier php3 dans le répertoire /squelettes !
Je suis sous BioSPIP 1.8.2g.
J’étais persuadé d’avoir mis la ligne en code :
c’est de ça dont je parle ci dessus :
<link href="#DOSSIER_SQUELETTE/stylecss.php3"... />
salut tout le monde pourriez vous m’aider svp ? j’ai fait mes pages en html et je veux personaliser mon site avec spip j’ai mis mes pages et photos corresponds dans un repertoire a la racine du dossier spip, le prbleme c’est que l’interface spip s’affiche par defaut et je ne sais pas comment la modifier
merci d’avance
Répondre à ce message
Peut-être ai-je mal lu, mais j’ai l’impression qu’il y a une contradiction ici...
Alors, est-ce qu’on peut ou pas appeler des $fond qui se trouvent dans un sous-répertoire du dossier de squelettes ? Uniquement pour les fichiers inclus ??
Exemple avec cette architecture :
squelettes/inc/menu.html
squelettes/article.html
page.php3
Peut-on écrire dans article.html :
<INCLURE(page.php3){fond=inc/menu}>
?Répondre à ce message
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
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.
Suivre les commentaires : |