Coder ses squelettes avec des INCLURE

Attention, page complètement obsolète, qui devrait être dépubliée : liens brisés, etc.

Ceci est une archive périmée mais qui reste intéressante, parfois autant pour l’article que les commentaires associés.

En codant ses squelettes avec des INCLURE, on perd un peu de temps au début, mais à terme on en gagne beaucoup, en rapidité d’exécution, et surtout cela facilite énormement les mises à jours. Explications et démonstration.

I. INTRODUCTION

La documentation officielle de SPIP :

Lorsque l’on a des éléments de texte et des boucles communs à plusieurs fichiers, on peut vouloir extraire ces éléments des pages où ils se trouvent, les installer dans un fichier séparé, et les appeler depuis les autres squelettes. De cette façon, le code commun est regroupé dans un unique fichier, ce qui facilite notamment les modifications qui concernent plusieurs squelettes d’un seul coup.

... Lire la suite ...

II. DÉBUTER AVEC LES INCLURES

Indispensable pour prendre un bon départ, et maîtriser les bases.
Cette section (II.) présente la gestion des INCLURES selon l’ancienne méthode. La troisième section présente la gestion des INCLURES telle qu’elle est utilisé aujourd’hui.

II.1 En pratique : Créer son premier INCLURE

Nous allons créer ici un premier INCLURE ...

Dans le dossier contenant vos squelettes, il vous suffit de créer deux fichiers :

inc_entete.php3 et inc_entete.html

Le fichier inc_entete.php3 doit contenir

<?php
$fond = "inc_entete";
$delais = 24*3600;
include ("inc-public.php3");
?>

I
et le fichier inc_entete.html lui contient (par exemple)

Mon premier inclure ... Le fichier html peut contenir des boucles spip, du php etc ...

Puis par exemple dans votre fichier article.html, il vous suffit de placer le code :

<INCLURE(inc_entete.php3)>

Maintenant, charger votre page article.html depuis votre navigateur internet, recalculer éventuellement cette page, vous devriez voir apparaître « Mon premier inclure ... Le fichier html peut contenir des boucles spip, du php etc ... » ...

Vous avez réalisé votre premier INCLURE.

II.2 Application n°1 : INCLURE la gestion des feuilles de style

Dans chacun de vos fichiers html, vous avez une ligne qui fait un appel à vos feuilles de style CSS.

<link rel="stylesheet" type="text/css" href="#DOSSIER_SQUELETTE/feuille_de_style.css" />

Ainsi, dans vos fichiers article.html , rubrique.html , auteur.html etc. il y a une ligne contenant cet inclusion html à la feuille de style.

Dans chacun de vos fichier, remplacer cette ligne par :

<INCLURE(inc_css.php3)>

puis créer le couple inc_css.php3 et inc_css.html .

inc_css.php3 contient alors

<?php
$fond = "inc_css";
$delais = 24*3600;
include ("inc-public.php3");
?>

et inc_css.html contient :

<link rel="stylesheet" type="text/css" href="#DOSSIER_SQUELETTE/feuille_de_style.css" />

Désormais, vos feuilles de styles sont gérés par le fichier inc_css.html , et si vous voulez modifier l’accès à votre feuilles de style (par exemple son nom du fichier, ou son chemin), il vous suffit de modifier un seul fichier, le fichier inc_css.html .

II.3 Explications complémentaires

A ce stade du tutorial, il est important de revenir sur quelques points importants laissés délibérément en suspend.

Le nom des fichiers inclus : Le nom des exemples de fichier inclus précédemment étudiés commence toujours par inc_, il s’agit là d’une disposition pratique non obligatoire, mais qui permet de clarifier le statut de chaque fichier. Ce n’est pas obligatoire, mais fortement conseillé.

Gestion du cache : $delais permet de gérer le cache. Vous pouvez modifier ce paramètre, mais il est conseillé de le laisser à 24*3600 sauf cas spécifiques.

Le nom du fichier .php3 et celui du .html peuvent être différents ...

Aussi il est possible de faire :

<INCLURE(inc_la_tete.php3)>

Avec inc_la_tete.php3 contenant :

<?php
$fond = "inc_a_toto";
$delais = 24*3600;
include ("inc-public.php3");
?>

Et inc_a_toto.html contenant :

bla bla quelconque ...

Mais ce dernier cas étant plus compliqué, et son utilité plus subtile, on ne l’utilisera pas dans la suite de nos exemples.

IMPORTANT :
1. Dans la suite du tutorial (uniquement pour la section II.) , lorsqu’il sera marqué « Créer le fichier inc_bidule.html  » il est sous entendu que vous devrez aussi créer le fichier inc_bidule.php3 qui lui contiendra :

<?php
$fond = "inc_bidule";
$delais = 24*3600;
include ("inc-public.php3");
?>

Et si vous oubliez, et bien tout simplement cela ne marchera pas ...

2. Avant de crier au loup (ça ne marche pas) il peut être utile de vider le cache ...

II.4 Application n°2 : INCLURE la gestion des métas

Dans chacun de vos fichiers html, vous avez une ou plusieurs lignes qui gèrent les balises métas, surtout si vous voulez optimiser le référencement de votre site.

Par exemple, dans article.html vous pouvez avoir ceci :

<BOUCLE_article_metas(ARTICLES) {id_article}>
	[<meta name="Description" content="(#INTRODUCTION|textebrut|entites_html)" />]
</BOUCLE_article_metas>

Et dans rubrique.html ceci :

<BOUCLE_rubrique_metas(RUBRIQUES) {id_rubrique}>
	<meta name="Description" content="[(#DESCRIPTIF|textebrut|entites_html)][ (#TEXTE|textebrut)]" />
</BOUCLE_rubrique_metas>

Le problème est alors de savoir comment coder le fichier INCLURE pour gérer les métas dans un seul fichier ...

LA SOLUTION :

Dans article.html remplacer le code gérant les métas par :

<INCLURE(inc_metas.php3) {id_article}>

Dans rubrique.html remplacer le code gérant les métas par :

<INCLURE(inc_metas.php3) {id_rubrique}>

Puis créer le fichier inc_metas.html (Et relisez donc le début de cette article ... surtout le message commençant par « Dans toute la suite de l’exposé ») contenant :

<BOUCLE_rubrique(RUBRIQUES) {id_rubrique}>
	<meta name="Description" content="[(#DESCRIPTIF|textebrut|entites_html)][ (#TEXTE|textebrut)]" />
</BOUCLE_rubrique>

<BOUCLE_article(ARTICLES) {id_article}>
	[<meta name="Description" content="(#INTRODUCTION|textebrut|entites_html)" />]
</BOUCLE_article>

Et voilà, vos métas sont désormais gérés par un unique fichier, et suivant le paramètre qui a été transmis à ce fichier inclus, les boucles seront exécutés ou pas.

II.5 Application n°3 : INCLURE « l’entête » et le « pied de page » de votre site sous spip

Cette application est particulièrement importante, car correctement réalisée, elle vous permet de rendre votre site modulable, et d’y intégrer facilement d’autres applications php ...

Pour un visiteur, un site web est bien lisible lorsqu’il est composé d’un entête (avec menu de navigation), d’un pied de page, et d’une section centrale contenant le texte, les images etc.

Aussi, il peut être intéressant de coder vos squelettes de manières à inclure le même « entête », et le même « pied de page », les mêmes feuilles de style...

-  Un entête
-  Une partie principale
-  Un pied de page

Aussi, dans tous les fichiers de votre squelette (article.html, rubrique.html, auteur.html ...), il devrait y avoir ceci :

<INCLURE(inc_structure_entete.php3)>

bla bla local, soit on affiche un article si on est dans le fichier "article.html", soit on liste les rubriques si on est dans le fichier rubrique.htm ...

<INCLURE(inc_structure_pieddepage.php3)>

De cette manière, sur toutes les pages du site, l’entête et le pied de page sont rigoureusement identiques, cela facilite la navigation et clarifie la cohérence de votre site.

II.6 Application 4 : INCLURE des données statistiques

Supposons que sur les pages article.html et plan.html, vous listez les articles, et que vous marquez à côté de chaque article sa popularité.

Comme les deux pages article.html et plan.html n’ont probablement pas été calculé au même moment par le moteur de spip, et donc mise en cache simultanément, il est probable que vous obteniez ceci sur votre navigateur Internet :

Consultation de article.html depuis votre navigateur Internet :
-  Titre de l’article 1 , puis son descriptif, (22 visiteurs aujourd’hui)
-  Titre de l’article 2 , puis son descriptif, (10 visiteurs aujourd’hui)
-  Titre de l’article 3 , puis son descriptif, (8 visiteurs aujourd’hui)
-  Titre de l’article 4 , puis son descriptif, (42 visiteurs aujourd’hui)

Consultation de plan.html depuis votre navigateur Internet :
-  Titre de l’article 1 (25 visiteurs aujourd’hui)
-  Titre de l’article 2 (8 visiteurs aujourd’hui)
-  Titre de l’article 3 (9 visiteurs aujourd’hui)
-  Titre de l’article 4 (36 visiteurs aujourd’hui)

Et si un visiteur remarque cette incohérence, ça ne fait vraiment pas très sérieux...

Face à ce problème, certain proposeront de réduire le cache des fichiers article.html et plan.html, ce qui est une très mauvaise solution, car cela ralentira votre site, et risque de contrarier votre hébergeur.

LA SOLUTION :

Dans vos fichiers article.html et plan.html il vous suffit de remplacer la balise #POPULARITE_ABSOLUE par <INCLURE(inc_popularite.php3) {id_article}>.

Puis de créer le fichier inc_popularite.html contenant ceci :

<BOUCLE_article_decompte_popularite(ARTICLES) {id_article}>
	#POPULARITE_ABSOLUE
</BOUCLE_article_decompte_popularite>

et vous n’aurez plus de problème de gestion du cache et de désynchronisation des statistiques.
Cette technique peut-être utilisé également pour le décompte des commentaires, le décompte des visiteurs ...

Remarques :
A. Vous noterez que le fichier inc_popularite.html ne contient pas seulement la balise #POPULARITE_ABSOLUE, mais une boucle, car lorsque le fichier inc_popularite.html est chargé (inclus), on est plus au sein d’une boucle, et ce même si le <INCLURE(inc_popularite.php3) {id_article}> a été placé au milieu d’un boucle dans le fichier parent.
B. Le délai du cache du fichier inc_popularite.html se règle dans inc_popularite.php3, et ici il parait adapté de le réduire un peu (par exemple 6*3600 au lieu 24*3600)

II.7 Bien gérer ces inclusions

A. Bien nommer ses inclusions
Tout fichier inclus devrait commencer par inc_ pour être facilement repérable.
Tout fichier inclus devrait avoir un nom explicite. Ainsi, pour un fichier inclus renvoyant la popularité d’un article, il est préférable de le nommer inc_article_popularite.html au lieu de inc_popularite.html car cela est plus explicite, et cela peut aussi signifier qu’il faut faire passer le paramètre id_article dans l’inclusion.
De préférence, les fichiers .html et .php3 devrait avoir le même nom.

B. Bien organiser ses inclusions
En usant et abusant des inclusions, vous risquez d’avoir un nombre important de fichier inclus commençant par inc_ et il peut être alors intéressant de déplacer tous ces fichiers dans un sous dossier. (Dans cette exemple, ce sous dossier sera appelé « inclusions »)
Ainsi, les fichiers inc_nomdufichier.html et inc_nomdufichier.php3 seront tous deux stockés dans un sous dossier du répertoire contenant vos squelettes , et de tels fichiers seront alors inclus par <INCLURE(inclusions/inc_nomdufichier.php3)>, et le fichier inc_nomdufichier.php3 contiendra logiquement $fond = "inclusions/inc_nomdufichier" .

C. Ne pas abuser des arguments inutiles
La tentation est grande de passer un maximum d’argument par les inclusions, tel {id_article} ou {id_rubrique}
Le problème est alors que si vous avez 500 articles, vous allez créer dans le cache autant de fichiers que d’articles... Si vous avez 10 inclusions avec le paramètre {id_article}, il y aura jusqu’à 10*500=5000 fichiers générés dans le cache...

II.8 CONCLUSION

Les INCLURE, c’est formidable ...

Cela facilite les mises à jour,
Cela permet d’extraire des bouts de code et de les mutualiser (tel le projet de noisettes sur spip-zone),
Cela permet de contourner des problèmes de désynchronisation lié au cache,
Cela autorise un réglage fin des délais de cache, car on peut fixer le cache de chaque fichier inclus à sa convenance,
Et surtout en codant son entête et son pied de page via des inclures, on peut sans grand effort intégrer graphiquement SPIKINI ou SEDNA par exemple... (Ce sera l’objet de deux autres articles)

Pour débuter et apprendre à maîtriser ces inclusions, je ne serais trop vous conseiller de partir d’un squelette déjà existant, et je vous recommande le squelette Maiis
 [1] qui est complet mais reste assez simple.
Si vous maîtriser bien le système d’inclusion, alors testez donc le squelette BLiP (Bon courage ...)

III. GÉRER LES INCLURES SANS LES FICHIERS PHP3


Cette section présente comment créer et gérer ses inclures sans utiliser de fichier .php3, c’est la méthode recommandée actuellement pour coder des squelettes.

III.1 Comment court-circuiter le fichier .php3

Vous avez sans doute compris, qu’un INCLURE nécessitait deux fichiers, un fichier .html et un fichier .php3.

Pour chaque :

<INCLURE(inc_bisounours.php3)>

vous devez alors créer le fichier inc_bisounours.php3 contenant en gros :

<?php
$fond = "inc_bisounours";
$delais = 24*3600;
include ("inc-public.php3");
?>

Et bien sur le fichier inc_bisounours.html contenant votre code, du html, des boucles spip, du php etc ...

Il existe un moyen de se passer du fichier .php3 et donc d’avoir deux fois moins de fichiers à créer : c’est l’utilisation du fichier page.php3 tel que défini sur l’article Comment faire un squelette facile à installer....

Explications :

Il suffit de remplacer :

<INCLURE(inc_bisounours.php3) >

Par :

<INCLURE(page.php3){fond=inc_bisounours}>

et de créer la page inc_bisounours.html, il n’y a plus besoin de créer de page inc_bisounours.php3.

Le fichier page.php3 se charge alors d’inclure le fichier inc_bisounours.html.

III.2 Reprise de l’application n°1 : INCLURE la gestion des feuilles de style

Le titre II.2 de cette article proposait d’inclure la gestion des feuilles de style, en créant le couple de fichier inc_css.php3 et inc_css.html .

En utilisant le fichier page.php3, il suffit désormais de faire :

Dans chacun de vos fichiers, remplacer la ligne contenant

<link rel="stylesheet" type="text/css" href="#DOSSIER_SQUELETTE/feuille_de_style.css" />

par :

<INCLURE(page.php3){fond=inc_css}>

puis créer le fichier inc_css.html contenant :

<link rel="stylesheet" type="text/css" href="#DOSSIER_SQUELETTE/feuille_de_style.css" />

(Et le fichier inc_css.php3 est devenu obsolète, il est inutile de le créer.)

III.3 Reprise de l’application n°2 : INCLURE la gestion des métas

Dans chacun de vos fichiers html, vous avez une ou plusieurs lignes qui gèrent les balises métas, surtout si vous voulez optimiser le référencement de votre site.

Par exemple, dans article.html vous pouvez avoir ceci :

<BOUCLE_article_metas(ARTICLES) {id_article}>
	[<meta name="Description" content="(#INTRODUCTION|textebrut|entites_html)" />]
</BOUCLE_article_metas>

Et dans rubrique.html ceci :

<BOUCLE_rubrique_metas(RUBRIQUES) {id_rubrique}>
	<meta name="Description" content="[(#DESCRIPTIF|textebrut|entites_html)][ (#TEXTE|textebrut)]" />
</BOUCLE_rubrique_metas>

Le problème est alors de savoir comment coder le fichier INCLURE pour gérer les métas dans un seul fichier ...

LA SOLUTION :

Dans article.html remplacer le code gérant les métas par :

<INCLURE(page.php3){fond=inc_metas}{id_article}>

Dans rubrique.html remplacer le code gérant les métas par :

<INCLURE(page.php3){fond=inc_metas}{id_rubrique}>

Puis créer le fichier inc_metas.html (Et il n’est pas nécessaire de créer le .php3 correspondant) contenant :

<BOUCLE_rubrique(RUBRIQUES) {id_rubrique}>
	<meta name="Description" content="[(#DESCRIPTIF|textebrut|entites_html)][ (#TEXTE|textebrut)]" />
</BOUCLE_rubrique>

<BOUCLE_article(ARTICLES) {id_article}>
	[<meta name="Description" content="(#INTRODUCTION|textebrut|entites_html)" />]
</BOUCLE_article>

Et voilà, vos métas sont désormais gérés par un unique fichier, et suivant le paramètre qui a été transmis à ce fichier inclus, les boucles seront exécutés ou pas.

Comme on peut le constater, le fichier page.php3 permet lui aussi de transmettre des paramètres.

III.4 Gestion du cache de spip

Cette méthode ne permet pas pour l’instant de gérer le délai du cache du fichier inclus, mais cela ne serait tarder, je tiens cette information de source sure ... Et la version 1.9 de spip arrive bientôt ...

Patience donc.

III.5 Stockage des inclusions dans un sous dossier

Et maintenant, supposons que vous souhaitez stocker vos fichiers inclus dans un sous dossier, il va vous falloir user d’un peu de ruse.

Si vos fichiers inclus sont contenu dans un dossier « inclusions », sous dossier de votre répertoire contenant les squelettes, il n’est pas possible de passer ce paramètre dans l’inclusion, aussi :

<INCLURE(page.php3){fond=inclusions/inc_bisounours}>

ne marchera pas.

Par contre, vous pouvez définir ce dossier dans votre fichier « ecrire/mes_options.php3 ».

Il vous suffit alors de remplacer :

<?php
$GLOBALS[ 'dossier_squelettes' ] = "squelettes" ;
?>

par

<?php
$GLOBALS[ 'dossier_squelettes' ] = "squelettes:squelettes/inclusions" ;
?>

Ou de créer le fichier correspondant s’il n’existe pas.

Explications techniques du fonctionnement de la déclaration « dossier_squelettes » (merci à James pour ses explications éclairées) :

Dans le fichier « ecrire/mes_options.php3 », on définit une variable globale « $dossier_squelettes », cette variable est exploitée par la fonction « find_in_path », qui collectionne des répertoires où trouver des fichiers facilement, qu’INCLURE s’empresse de fouiller, pour séparer les répertoires, on fait comme sur Unix, on les sépare lors de leur déclaration par un ’ :’
On peut donc définir de multiples dossiers en les séparants par des ’ :’, et le moteur de spip les explorera à la recherche du fichier défini par la variable « fond ».

III.6 CONCLUSION

La méthode utilisant le fichier page.php3 (telle que défini dans la section III.) est la méthode que nous vous conseillons d’utiliser, elle limite la création de fichier .php3.

Maintenant, il ne vous reste plus qu’à mettre les mains dans le code, et mettre à jour vos squelettes, s’ils n’utilisent pas cette méthode.

Pour poursuivre votre réfléxion, quelques articles à lire ou relire :

Notes

[1note spip-contrib : article supprimé depuis

Discussion

10 discussions

  • 2

    Bonjour,

    je souhaite qu’un inclure aille chercher des infos dans plusieurs rubriques. Je ne sais pas comment faire et je n’ai rien trouvé.
    Si je fais : [(#INCLUREfond=inclure/inc-actualites, id_rubrique=1 )], no problème.
    En revanche, si je fais [(#INCLUREfond=inclure/inc-actualites, id_rubrique IN 1,2,3,4 )] > 0 résultat
    De même si je fais [(#INCLUREfond=inclure/inc-actualitesid_rubrique IN 1,2,3,4)].

    Pourriez vous m’aider ???

    • Quand on fait un INCLURE, on indique d’une part le nom du fichier à appeler et, d’autre part, on indique quels sont les variables à transmettre à cette inclusion et leur valeur
      Dans la première écriture [(#INCLUREfond=inclure/inc-actualites, id_rubrique=1 )], il est écrit que l’inclusion saura qu’il faut considérer que id_rubrique aura « 1 » comme valeur.
      Par contre, dans l’écriture [(#INCLUREfond=inclure/inc-actualites, id_rubrique IN 1,2,3,4 )] , l’inclusion ne sait à quel saint se vouer car cette écriture ne lui transmet rien : , id_rubrique IN 1,2,3,4 est un critère au sens « boucle » du terme, pas une façon de transmettre un paramètre

    • Hello,

      Dans le squelette appelant, il faut passer la liste des rubriques sous forme d’array, et c’est dans le squelette inclus que tu fais {id_rubrique IN machin} ou {id_rubrique ?}.
      Ah, et il faut toujours privilégier la syntaxe <INCLURE> au lieu de [(#INCLURE)], à moins qu’il soit nécessaire de mettre de choses dans les parties conditionnelles : [ avant (#INCLURE) après ].

      squelette appelant :

      <INCLURE{fond=inclure/inc-actualites, id_rubrique=#LISTE{1,2,3,4}}>

      squelette inclus :

      <BOUCLE_x(ARTICLES){id_rubrique ?}>...</BOUCLE_x>

    Répondre à ce message

  • 1

    Bonjour
    Je travaille sur un site dont chaque secteur a une feuille de style spécifique. Tous les articles ont la même présentation, je veux donc utiliser le même code.

    J’ai créé un fichier article.html qui est une première personalisation depuis la dist.
    Je crée ensuite un fichier article-X.html (où X est le numéro du secteur concerné). Dans le <head> de ce fichier j’appelle ma feuille de style distincte.
    Je crée un fichier inc-content_article.html ou je recopie tout (à peu de choses près) ce qu’il y a dans le <body> du fichier article.html, que je remplace de suite par : <INCLURE{fond=inc-content_article}{id_article}>

    Puis ... même procédure pour article-X.html, l’idée étant en appelant le même inc-content_article.html de n’avoir plus qu’un seul endroit ou travailler sur la boucle article, chose avec laquelle je suis pas encore familier du tout.

    Seulement voilà au premier essai d’inclusion quand je raffraichis et recalcule la page (cache vidé, si si !) j’ai bien le style demandé (quand-même ...) mais plus le contenu de l’article, seulement les messages de forum.
    Par contre des éléments présents dans les <div>

    situés dans le fichier inclus (le tagcloud entre autres) s’affichent bien, eux.

    J’ai du oublier quelque chose mais quoi ?


    SPIP 1.9.2d en local sous XP avec Easy php (avec Linux je suis pas au point)

    • J’arrive à qqch avec
      <INCLURE{fond=inc-content_rubrique}{id_rubrique}>, naturellement en appliquant ça cette fois aux squelettes rubrique-X (où X est le secteur).

      Mais j’ai plus la barre avec l’accès à l’espace perso et le recalcul c’est lié ?

    Répondre à ce message

  • Bonjour —

    Tout d’abord un TRES grand merci pour ce tutoriel !!! Pour la première fois je comprend la logique derrière la fonction des INCLURES et ça c’est agréable !

    Je voulais simplement ajouter un petit changement d’application qui est venu avec SPIP 1.9. Je cite ce qui est expliqué dans l’article Migration vers SPIP 1.9 :

    La syntaxe des inclusions peut être simplifiée : la mention « page.php3 » n’est plus nécessaire ; on ne précise plus que le nom du squelette à inclure, sous la forme <INCLURE{fond=mon_squelette}{critere1}{critere2}{...}>.

    Encore merci !

    Répondre à ce message

  • Un gros bravo pour ce tutoriel. Enfin une approche pédagogique claire et professionnelle.

    Je serai heureux de lire les suivants.

    Je suis un hypergros consommateur des INCLURES.

    Et les noisettes... Ça se consomme comment au juste ?

    Répondre à ce message

  • Bonjour,
    Sans beaucoup de connaissance, je transforme un site statique en site dynamique sous SPIP. J’ai deux types de présentation très différentes suivant les rubriques du site. Il faut bien sur que le site reste tel qu’il était, le but étant de pouvoir faire des mises à jour faciles et régulières.. Je pensais faire des inclures de css (css1 ou css2) mais je dois dire que je ne vois pas trop comment faire à la lecture de cet article. Je ne sais pas comment faire hériter les articles et les sous-rubriques d’une rubrique de son css. Peut-être l’inclure n’est pas une bonne solution ?
    Merci de votre aide.

    Répondre à ce message

  • Peut-on inclure dans une page rubrique.html une page article.html ?
    Je m’explique. Je débute d’où mes difficultés
    J’ai plusieurs rubriques. Je veux leur donner un apsect différent. J’ai donc une rubrique-1.html dans laquelle j’ai 3 div, une pour la liste des sous-rubriques (par logo) contenues dans la rubrique 1 :

    une pour la liste des articles (par logo) contenues dans la sousrubrique dans laquelle je me trouve :

    une avec le premier article de la sous-rubrique que j’ai indiqué en lien depuis ma page accueil pour ne pas arriver sur une page vide :

    [(#TEXTE|image_reduire0,440)]

    Jusque-là tout fonctionne. Le problème, c’est quand je veux cliquer vers un autre article de la sous-rubrique. Car il me semble impossible de créer une page article.html qui ressemble à ma page rubrique-1.html car je ne vais pas créer autant de page html que d’articles ! alors j’avais pensé inclure dans ma div#contenu un INCLURE pour appeler une page article.html. Mais je patauge complètement.
    Est-ce que quelqu’un comrend ce que je feux faire ? Est-ce possible ? ou je délire complètement ?
    Merci pour votre aide

    Répondre à ce message

  • Merci pour ces explications, bien faite, elles sont le bienvenu.

    Mais j’ai un petit souci. J’ai un bout de code chargé de construire un menu en cascade des rubriques. Comme il est commun a toutes les pages, j’ai justement utilisé la methode inclure, avec page.php3 et mon fihier inc-menu comme fond. La j’obtiens la meme erreur que le message precedent, c’est a dire que la premiere fois ma page se charge bien, c’est a la deuxieme ou troisieme fois que j’obtiens une erreur 404. Je ne comprend pas bien pourquoi, car puisque la page est calculé une fois et qu’elle s’affiche nickel, pourquoi si je la ré-affiche, elle plante.

    Dans mon inc-menu.html, j’ai plusieurs boucle imbriquées, avec du php melangé a tout sa. Je me suis demandé si le php contenu dans le squelette inclus ne provoquait pas cette erreur.

    La boucle principal ne fait que parcourir toutes les rubriques, donc je ne passe pas d’argument lors du inclure.

    Je vais tenter de reverifier le code source généré par spip la première fois,peut etre qu’il y a une erreur sournoise de ma part qui fait planter par la suite.

    Merci d’avance.

    Répondre à ce message

  • 4

    Bonjour Vincent.

    Merci pour ta réponse.

    J’ai trouvé une autre chose étrange : je crois qu’il y a un pépin concernant la variable globale « dossier_squelette » et la méthode que tu as décrite.

    J’ai amplement utilisé la méthode de codage avec des inclure et tout s’est mis à mal tourner à partir du moment où j’ai déplacé mes squelettes dans un autre dossier nommé « intranet ». J’ai mis beaucoup de temps avant de m’en rendre compte :

    Je règle mes_fonctions.php3 et le premier chargement de la page fonctionne correctement (mais Firefox n’indique pas la fin du chargement... oH !). Je clique et ça fonctionne, du moins je le crois. C’est au moment d’un Reload (F5 ou Ctrl-R) ou quand je reviens sur une rubrique en cache que ça me saute aux yeux : Erreur 404 par dessus ma page (la version 404-dist). Je reload encore... 2 erreurs 404 par dessus ma page encore... Deux ou trois autres reload et mon disque par en vrille... Panique au Pic-Nique ! Ça fourmille pas comme j’aimerais...

    Tout est revenu dans l’ordre en replaçant mes squelettes dans le dossiers « squelettes » et en effaçant mes_fonctions.php3...

    J’ignore si ce comportement est en rapport avec page.php3, mais à première vue, il semble que si puisque j’ai essayé des skins sans problème, comme kubric qui utilise les dossiers squelettes sans utiliser page.php3.

    M’enfin...

    Encore merci.

    • Lors de chaque modification structurelle de ton site, penses à vider le cache de ton navigateur et de spip.

      1. Quelle version de spip utilise tu ?

      2. Tu as mis quoi dans ton fichier mes_fonctions.php3 ? (recopie ton code, à l’identique entre des balises « cadre »)

      3. Tu l’as mis où ce dossier « intranet » ?

      4. Pourquoi ne laisses tu pas tes squelettes dans le dossier squelette ?

      5. URL du site ?

      J’ignore si ce comportement est en rapport avec page.php3, mais à première vue, il semble que si puisque j’ai essayé des skins sans problème, comme kubric qui utilise les dossiers squelettes sans utiliser page.php3.

      Non, si cela plante, c’est que tu n’a pas fait ce que tu n’as pas mis ce qu’il faut dans le mes_fonctions.php3 ...

    • 1. La version 1.8.2g

      2. mes_fonction.php3 =

      <?php
      $GLOBALS['dossier_squelettes'] = "intranet" ;
      
      ?>

      3. à la souche de SPIP... exactement à la même place que le dossier_squelettes.

      4. ... dois-je vraiment répondre à celle-là ???

      5. le URL n’est plus... mon Apache par en vrille... j’ai pas le goût de jamer mon site... ma machine test est derrière un pare-feu... D’autre part, c’est pas compliqué à reproduire : on change le dossier squelettes et on essai le site en s’assurant qu’il y a au moins 2 niveaux de profondeur d’inclure... détail que j’ai omis lors du dernier message.

      J’ai refait somme tout le test qui confirme le problème. J’ai aussi un collègue qui a expérimenté le même problème.

      Je répète qu’une fois remis dans le dossier « squelettes », les oiseaux chantent...

    • Alors simplifie donc toi le problème, remet donc tes squelettes dans le dossier squelette.

    • C’est exactement ce que j’ai fait...

      La conclusion est qu’il ne faut pas utiliser les options qu’offre SPIP... surtout si elles sont utiles à la gestion des sites ?!?

    Répondre à ce message

  • 1

    Je trouve cette méthode très intéressante et j’ai fait des essais. Il s’avère, selon mes essais, que les doublons ne soit pas pris en compte... :o(

    Exemple :

    Ma page principale contient ce code afin de cacher une rubrique :

    <BOUCLE_exclure(RUBRIQUES)
     {titre_mot=exclureDuMenu}
     {doublons exclureDuMenu}>
    </BOUCLE_exclure>

    Mon inclure contient ce code :

    <BOUCLE_secteurs(RUBRIQUES)
     {racine}{par num titre}
     {par titre}
     {doublons exclureDuMenu}>
    ...

    Dans cet exemple, l’effet de doublons exclureDuMenu est ignoré et la rubrique cachée apparaît...

    • En effet, il te faut mettre ton code dans le inclure ...

      <BOUCLE_exclure(RUBRIQUES)
       {titre_mot=exclureDuMenu}
       {doublons exclureDuMenu}>
      </BOUCLE_exclure>

      à mettre dans le « inclure »

      Chaque fichier inclus est indépendant, en fait il est d’abord compilé par le moteur de spip, PUIS inclus dans le fichier de destination.

    Répondre à ce message

  • 2

    Ce tutoriel sur les est vraiment génialm mais j’ai néanmoins un soucis car je dispose d’un forum en PHP dont j’aimerais utiliser certaines variables, comme par exemple indiquer sur sommaire.html le dernier membre inscrit.

    Mais je n’arrive pas à inclure de PHP, j’ai donc utiliser cette méthode...

    mais j’obtiens des erreurs... à savoir rien de ce que je veux, j’obtiens la répétition des autres blocs que j’ai créé...

    • Désolé mon code est tombé en miettes... à l’affichage de mon précédent message, le voilà :

      < INCLURE(page.php3)fond=inc_stats_punbb.php >

    • Tu peux inclure du php, mais dans ce cas là, il te faut faire un inclure php et non pas un inclure spip...

      <?php
      include("blaba.php3");
      ?>

    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 :

  • 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
  • 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 apparaît.

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.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom