Intro
Ayant à récupérer une série d’articles (publiés avec un autre système) ayant du contenu dynamique géré via les SSI
j’avais besoin de trouver un moyen simple et rapide à mettre en oeuvre pour récupérer cette fonctionnalité avec notre SPIPOU favoris ;-) L’écriture d’un petit filtre (à rajouter dans mes_fonctions.php3) - en partie pompé sur ce qu’à écrit gouarfig sur php - qui reste certainement encore perfectible (notament en terme de sécurité et d’efficacité ; C’est mon 1er « programme » php) a parfaitement solutionné mon problème.
Le code
/*
* inclure: Cette fonction emule partie des include virtual SSI.
* Version: 1.1
*
* - La syntaxe typographique est la suivante :
* <!--#include virtual='/machin/a/inclure' -->
* <!--#include file='fichier/a/inclure' -->
* - Il faut l'utiliser dans le squelette d'affichage de l'article de cette
* façon [(#TEXTE|inclure)]
*
* Exemples:
* <!--#include virtual='/cgi-bin/compteur' -->
* <!--#include file='fichier.txt' -->
*/
function inclure( $texte ) {
$base_url = 'http://' . $_SERVER["SERVER_NAME"];
$filtre_include = '/<!--# *include *(virtual|file) *= *[\'"]([^> \'"]+)[\'"] *-->/';
$filtres_html =
array(
'/<[\/]? *(html|head|body) *[^>]*>/i',
'/<title>[^<>]*<\/title>/i',
'/(<|<)\?xml [^?>]+\?(>|gt;)/i',
'/<!DOCTYPE [^>]*>/',
'/<link [^>]*>/'
);
while ( preg_match( $filtre_include, $texte, $resultats )) {
if( $resultats[1] == 'file' ) {
$script = './' . $resultats[2];
} else{
$script = $base_url . $resultats[2];
}
$file = fopen( $script, 'r' );
if ( !$file ) {
$texte_inclus = '<p class="warning">[Inclure <tt>$script</tt>, erreur!]</p>';
} else {
$texte_inclus = '';
while ( !feof ( $file )) {
$txt = fgets( $file, 1024 );
$txt = preg_replace( $filtres_html, '', $txt );
$texte_inclus = $texte_inclus . $txt;
}
fclose( $file );
}
$texte = preg_replace( $filtre_include, $texte_inclus, $texte, 1 );
}
return( $texte );
} // end inclure()
Comment ça fonctionne plus précisement ?
- Je suppose que le lecteur a tout compris sur l’utilisation des SSI
- Dans le texte d’un article on peut insérer maintenant des « instructions » SSI telles que :
<!--#include virtual='/cgi-bin/monscript?arg=param' -->
- Lors du traitement de l’article par SPIP (au moment de sa mise en cache), la fonction inclure est invoquée sur le texte du dit article. Ce qui va se passer pour l’exemple ci dessus est un appel « HTTP » à http://monserveur/cgi-bin/monscript?arg=param
et insertion de ce qui est retourné, par le script cgi monscript, dans le texte de l’article à la place de l’instruction SSI.
- Ceci permet d’avoir des articles au contenu « semi » (à la période de rafraichissement du cache près) dynamique, à la manière des SSI.
Aucune discussion
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 : |