[spip-dev] fonction Include dans les squelettes

Bonjour,

Voila, il me manquais une fonctionnalité quand j'ai voulu créer un squelette
pour spip :
la possiblilté d'inclure un squelette dans un autre. Pour par exemple créer
un menu avec mes rubriques qui soit toujours le meme dans les différents
squelettes (article, sommaire, etc.)

Donc voici une fonction qui fait ca, de façon récursive. Elle ne devrais pas
ralentire le traitement quand elle n'est pas utilisée...

fichier : inc-calcul-squel.php3

function parser_include($texte) {
$result = '';
while ($texte) {
    if (($p=strpos($texte, '<INCLUDE')) === false) {
    $result.=$texte;
    $texte = "";
   } else {
     $result .= substr($texte, 0, $p);
     $f = strpos($texte, '>', $p);
     $incl = substr($texte, $p, $f - $p + 1);
   if ($r = ereg('<INCLUDE[[:space:]]*([^>]*)>', $incl, $regs)) {
     $result .= parser_include(implode("", file($regs[1])));
    }
    $texte = substr($texte, $f + 1);
   }
}
return $result;
}

Pour que ca fonctionne il faut l'appeler avant tout traitement sur le
squelette donc je l'ai rajoutée au début de la fonction :

function parser_texte($texte, $id_boucle) {
global $boucles;
$i = 0;
$texte = parser_include($texte);
  ...

Pour l'utilisation : dans un squelette, je met :

<INCLUDE monfichier.html>

tout simplement

Salut David,

C'est une solution "en attendant", mais qui ne convient pas à ce que doit être une fonction include dans SPIP.

-> Il faut pouvoir passer des "variables" à l'include, sinon cela n'a pas grand intérêt. Donc:
<INCLUDE haut_article.php3?id_article=#ID_ARTICLE> par exemple.

-> Problème potentiel de conflit dans les noms des boucles. Puisque tu inclus directement le texte d'un fichier dans un autre fichier, tu cours le risque d'utiliser plusieurs fois les mêmes noms de boucles.

-> L'intérêt de l'include est non seulement l'économie de programmation, mais aussi, dans SPIP, des temps de "cache" différents. Par exemple, tu as une page d'article quasiment statique, car jamais modifiée ($delais= 1 semaine), avec inclusion de certaines fonctions de navigation (les nouvelles brèves par exemple) renouvelées très fréquemment (toutes les 2 heures par exemple, sur un site qui publierait énormément de brèves).

Du coup, ça demande un développement spécifique un poil élaboré. Les dernières évolutions de SPIP vont certainement nous faciliter le travail, car le code qui calcule l'espace public est beaucoup plus propre.

Amicalement,
ARNO*