Afficher des répertoires ou un site externe dans un site SPIP

L’objectif de cette contrib est de permettre, à l’intérieur d’un site SPIP, d’afficher simplement le contenu de répertoires du disque, de naviguer dans ceux-ci et même d’afficher un site web externe.

Introduction


Le site du satellite Planck (http://www.planck.fr) dont je m’occupe est à la fois un outil de publication des informations concernant le satellite mais aussi un outil de travail utilisé par les personnes construisant le satellite et dévellopant les programmes de réduction des données qu’il enverra. A ce titre, certains programmes génèrent automatiquement des fichiers dans des répertoires (voire même une arborescence complète) ainsi que des pages html simples présentant leurs résultats.
Lors du développement du site web, il fallait donc trouver un moyen pour permettre, dans l’environnement du site SPIP général, de naviguer dans ces répertoires et d’afficher les pages générées par ces programmes.
Certe, un lien “brutal” vers les répertoires était possible, mais cela signifiait sortir du site et perdre la présentation générale. En me basant sur un script nommé GetUrl trouvé sur le net, j’ai écrit la contrib suivante permettant aussi bien d’afficher le contenu d’un répertoire et de naviguer dans son arborescence que d’inclure des pages html simples de n’importe quel site à l’intérieur d’un article SPIP.

Le principe

L’idée de base consiste à ouvrir une connexion vers la page que l’on veut insérer (qui peut être soit la page générée par apache et correspondant au contenu d’un répertoire, soit une page web externe quelconque), d’envoyer les bons entêtes http (ce qui permet par exemple de passer une authentification), de récupérer la page servie dans un buffer, de la traiter (enlever les entêtes <head> etc..., réecrire les liens, etc...) puis d’insérer le résultat où l’on veut dans notre site.

Quelque détails techniques

Pour ceux qui veulent comprendre comment ça marche, voici quelque détails.
On utilise la fonction php fsockopen qui permet d’ouvrir une connection vers une adresse donnée (en l’occurence l’url à récupérer. Par exemple: http://www.le_site_a_inclure.com). On fait un GET et on bufferise ce qui est renvoyé. Une fois la page entièrement récupérée, on réecrit les liens en absolu de façons à ce qu’ils fonctionnent dans notre site (en effet, les liens sont généralement exprimés de façon relative à l’url de base de la page dans laquelle ils apparaissent - ici www.le_site_a_inclure.com- mais maintenant la page va être affichée dans notre site spip - www.mon_site_spip.com - il faut donc corriger cela sinon les liens ne marcheront pas). Pour terminer, on ne garde de ce qui est renvoyé que ce qui est compris entre les balises <body> et </body>. Cette manip est nécessaire pour que la page finale SPIP soit bien formée (elle contient déjà ses propre balises <head et <body> ).

Limitations


Comme toute contrib, celle-ci présente certaines limitations. Premièrement, du fait que l’on ne conserve que ce qui est entre <body> et </body>, on perd les références aux éventuelles feuilles de style déclarées dans la partie <head Le rendu d’un site utilisant des feuilles de style ne sera donc pas bon. J’aurais pu récupérer les liens vers les feuilles de style, mais cela me paraissait trop dangereux. En effet, on ne maitrise pas forcément les feuilles de style des sites que l’on veut inclure et si ces derniers utilisent des classes de même nom que celles utilisées dans notre propre site, on risque de “casser” la présentation générale de notre site !
Deuxièmement, il vaut mieux éviter d’inclure des pages présentant des formulaires ou du javascript. En effet, d’une part il n’est pas facile de prévoir le comportement des scripts éventuellement lancés (par exemple tests sur les url qui ne fonctionneront pas si ces dernières sont réecrites) et d’autre part, les formulaires ne sont pas propagés.
Cette contribution s’adresse donc principalement à ceux qui veulent permettre la navigation à travers des répertoires ou l’affichage de pages HTML “simples” à l’intérieur de leur site sous SPIP.

Fonctionnement

Une fois installée, cette contribution permet d’afficher facilement à la fin d’un article le contenu d’une page accessible par le web. Pour cela, il suffit, dans l’article qui doit afficher la page, de mettre le tag suivant:

<browse http://www.url_a_inclure.com/> 

et le tour est joué... ou presque !

En effet, pour éviter que n’importe quel contributeur n’affiche n’importe quoi dans le site, j’ai ajouté un mécanisme d’autorisation qui fait que le webmaster doit ajouter dans le fichier mes_fonctions.php3 la liste des sites qui pourront être ainsi inclus. Il faut donc ajouter http://www.url_a_inclure.com dans cette liste:

$GLOBALS['Authorized_sites']=array("http://www.planck.fr",
"http://www.url_a_inclure.com"        );

Et là normalement ça marche.

Installation

C’est assez simple.
L’installation consiste en l’application du filtre fl_browse lors de l’affichage du texte de l’article dans la boucle article:

[(#TEXTE|fl_browse)]

puis l’ajout de la ligne suivante dans le squelette des articles (à l’endroit où l’on veut que la page inclue apparaisse):

<?php if ($flbrowse){include("squelettes/browse.php");} ?> 

Attention, “squelette/browse.php” est le chemin menant au fichier browse.php par rapport à la racine du site.

Fichiers :
Ensuite, il suffit de copier le fichier browse.php à l’endroit indiqué et d’ajouter le contenu du fichier contrib_geturl.php à mes_fonctions.php.

browse.php
Le fichier browse.php qui contrôle la mise en page de la page inclue.
contrib_geturl.php
Le code à ajouter à mes_fonctions.php3

Tous les fichiers sont réunis dans le zip suivant:

Contribution browse_url
Tous les fichiers de la contribution

Enfin, un exemple du résultat est visible sur le site du satellite Planck.

Normalement, ça suffit.
Bonne chance.

updated on 23 September 2007

Discussion

4 discussions

  • bonjour , mon ami , je veux just proposer un question . j"essaie d’installer ce contrib , et il me donne aucun resultat , merci pour l’aide

    العاب برق

    Reply to this message

  • Salut, comment ca va
    Je ne sais pas si tu as résolu le problème, mais je n’arrive pas à le reproduire !
    Pour ce qui est de la version de spip, la contrib fonctionne bien sous 1.7, mais je
    n’ai pas testé avec la 1.8... Cela dit, normalement, il n’y a pas trop de raisons que ça ne marche pas.
    merci pout tous
    j’ai un site web
    http://jeu-jeu-jeu.net/
    http://jeu-jeu-jeu.net/category/hguhf/
    http://jeu-jeu-jeu.net/category/jeux-al3ab-mbc3/

    Reply to this message

  • 2

    Bonjour,

    J’ai télécharger votre contrib, mais le doit probablement etre plus stupide que la moyenne car je ne vois pas du tout ou modifier le fichier article pour y mettre :
    d’abord le filtre
    ensuit, l’endroit ou doit apparaitre la page
    Sur spip 1.9.1 que j’utilise, je ne vois aucun endroit ou mettre ces element a priori

    • Bonjour,
      j’éprouve les mêmes difficultés que vous pour installer cette intéressante contrib. Pourriez vous me fournir une explication pour “LES NULS”.
      Merci
      JJF

    • Rien ne sert de se masturber avec du php, des feuiles mes_options.php, etc.…
      Voici la formule magique:
      object data=“http://lesite_a_lier.com/fichier.html” width=“XX%” heigt=“600” type=“text/html”
      je n’est pas mis les balises d’ouverture de fermeture (supérieur et inférieur) afin de lire la formule, ne pas les oublier!!!!!!!!!.

      jfD

    Reply to this message

  • 3

    Salut,

    Très bonne contrib. En tout cas très utile pour moi. Cependant il y a un mais :

    Je suis en train de réaliser un site pour une région et une des communes m’a mandaté pour la refonte de leur site. Les deux sont (ou seront) sous SPIP. Je désire afficher la liste des sociétés de la commune. Pour se faire un fichier avec une boucle dans le premier site et ta contrib dans l’autre et le tour est joué.

    Sauf que

    En accédant à l’article avec www.ici.fr/article.php3?id_article=x&recalcul=oui ça joue.
    Mais (oui, il y a un mais) sans le recalcul (lors du 2ème , 3ème visionnage) ça n’affiche pas le contenu de l’article inclu avec la commande :

    <browse http://www.la.fr/mapage.php3>

    D’où mes questions:
    -  comment résoudre le problème ?
    -  Autres possibilités d’insérer des données provenant d’une autre base de donnée SPIP
    -  Est-ce que t’as contrib tourne avec SPIP 1-8b2 ?

    J’ai mis un exemple dans une zone de test. Le test est simple, visionner l’article, aller voir un autre article puis revenir sur l’article (1er affichage correct, deuxième manque l’include)

    • Je constate ton problème, je ne l’ai pas sur mon site de test en local (spip 1.7), je pense que ça vient de toi plus que de la contrib (ou un peu des 2 ;-) .

      Pour ta question sur la version de spip, les contribs publiées sont testées pour la version actuelle de spip, donc en l’occurence Spip 1.7.2, et comme ça marchait.

    • Salut,
      Je ne sais pas si tu as résolu le problème, mais je n’arrive pas à le reproduire !
      Pour ce qui est de la version de spip, la contrib fonctionne bien sous 1.7, mais je
      n’ai pas testé avec la 1.8... Cela dit, normalement, il n’y a pas trop de raisons que ça ne marche pas.

    • J’ai pris une autre approche,

      Je me suis basé sur la contrib de meta-cités vu que j’avais juste besoin d’inclure des scripts (internes ou externes). Ca à l’air de fonctionner. J’ai mis dans mon fichier mes_fonctions la liste des sites pouvant être inclus.

      Merci pour vos réponses.

    Reply to this message

Comment on this article

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