Lancer un script PHP dans un article

Ceci est une ARCHIVE, peut-être périmée. Vérifiez bien les compatibilités !

Pouvoir lancer un script personnel dans un article spécifique et créer ainsi des articles à contenu « dynamique ».

Introduction :

La philosophie de SPIP est de pouvoir publier des articles.
Donc on ne peut pas faire un <?php include( "script.php"); ?> dans un article, ca n’est pas fait pour ca.

Pourtant dans certains cas précis, vous pouvez avoir besoin d’afficher dans un article des informations que vous avez calculé et surtout qui peuvent évoluer.

Exemple

Je dois gérer sur mon site une liste des membres d’un club.

Cette liste est modifiée régulièrement, et je l’ai donc mise dans une table de ma base de données.

J’aurai pu créer une page spécifique pour afficher cette liste, et pourtant j’aurai aimé qu’elle s’intègre parfaitement dans l’environnement SPIP, déjà niveau design, mais aussi qu’on puisse faire une recherche SPIP sur la partie fixe de l’article (autour de la liste), qu’elle apparaisse dans les rubriques, etc.

J’aurai également pu utiliser la fonction de redirection d’article, mais elle ne me plait pas non plus parce que j’ai envie d’utiliser une fonctionnalité importante de SPIP qui est le cache des pages !

Je vais donc vous montrer comment j’ai fait !

Avantages :

Par rapport au développement d’un partie spéciale d’un site, cette solution permet :
-  de garder une arborescence homogène avec les rubriques de SPIP, et compatible avec le moteur de recherche.
-  de pouvoir habiller un script dans un article et donc de le modifier facilement.
-  de bénéficier du moteur de cache de SPIP.

Sécurité :

Pour une question de sécurité, chaque script proposé dans les articles DOIT être inscrit dans une liste de scripts autorisés, pour ne pas que chaque rédacteur puisse faire n’importe quoi avec n’importe quel script !

Concrètement :

Ce que nous allons pouvoir faire c’est inclure à n’importe quel endroit de l’article la commande suivante :

#INCLURE (mon_script.php3)

Ceci plusieurs fois, et avec plusieurs scripts différents.

Le filtre qui va bien

J’ai créé un filtre appelé "autoriser_php" à appliquer sur le champs voulu (en particulier #TEXTE)

Voici ce filtre, à ajouter au fichier « mes_fonctions.php3 »

/*****************************************************************************/
/**  Cette fonction permet de lancer un script PHP dans un article
/**
/**  La syntaxe est la suivante :
/**    #INCLURE ( nom_fichier )
/**
/**  Auteur  : F. Quointeau
/**  Version : 0.0.2
/**  Date    : 16 Mai 2004
/*****************************************************************************/
function autoriser_php( $texte) {
 
    // Dossier où sont stockés les scripts
    $dossier_inclus = './';
 
    // Liste des scripts autorisés
    $scripts_autorises = Array( 
        'mon_premier_script.php3',
        'mon_second_script.php3'
    );
 
 
    // Les fichiers inclus autorises sont : *.php, *.php3, *.php4, *.phtml, *.htm, *.html, *.inc
    $chaine_recherche = '/#INCLU[R|D]E( *)\(( *)([^\)]*\.(php|php3|php4|phtml|htm|html|inc))( *)\)/i';
 
    // Recherche la chaine #INCLUDE(script)
    while( preg_match( $chaine_recherche, $texte, $resultats)) {
        // Verifie le droit d'inclure ce fichier script !
        $autorise = false;
        reset( $scripts_autorises);
        while( $script = each( $scripts_autorises)) {
            if( strcasecmp( $script[value], $resultats[3]) == 0) $autorise = true;
        }
        if( $autorise == true) {
            // Verifie que le fichier existe
            if( file_exists ( $dossier_inclus . $resultats[3])) {
                // Vide le buffer de sortie
                $affichage_php = '';
                // Et lance le fichier inclu !!!
                include( $dossier_inclus . $resultats[3]);
            } else {
                $affichage_php = "<b>#INCLURE: Le fichier de script n'existe pas !</b>";
            }
        } else {
            $affichage_php = "<b>#INCLURE: Script NON autoris&eacute; !</b>";
        }
        // Attention, n'effectue qu'un seul remplacement à la fois !
        $texte = preg_replace( $chaine_recherche, $affichage_php, $texte, 1);
    }
 
    return( $texte);
}

Attention :
Au début de la fonction, il y a un tableau php qui décrit la liste des scripts qui ont le droit d’être lancé à partir d’un article. Pensez à le mettre à jour avec vos scripts.

Dossier des scripts

Si vous souhaitez mettre vos scripts dans un dossier spécial, mettez également le chemin des scripts dans la variable
$dossier_inclus au début de la fonction filtre. Par exemple :

    $dossier_inclus = 'mes_scripts/';

Notez le ’/’ obligatoire à la fin du dossier.

Mais vous pouvez aussi « cacher » vos scripts (non disponibles par une requête HTTP dessus) en les placant en amont du dossier racine du site web :

    $dossier_inclus = '../mes_scripts_caches/';

Attention, en fonction de votre hébergeur, vous n’aurez pas forcément la possibilité de le faire !

Le script des familles :

Voici le script que vous voulez promouvoir :

<?php
    echo( "Hello World !");
?>

Puissant, mais vous allez devoir l’écrire sous cette forme :

<?php
    $affichage_php = "Hello World !";
?>

Vous suivez ?

Vous ne pouvez pas vous permettre d’afficher sauvagement vos informations directement par un echo( ), celles-ci ne seraient pas prises en compte dans le cache de SPIP, et souvenez-vous que votre script travaille à l’intérieur d’un filtre, et qu’il y a peut être d’autres filtres qui attendent derrière :-)

Et maintenant, comment relier le tout ?

Créez un article comme celui-ci par exemple :

Bonjour,
voici le résultat de ma fonction :
#INCLURE (mon_premier_script.php3)

Hop

Créez ensuite un fichier mon_premier_script.php3 qui contient le script énoncé plus haut ; mettez le dans le dossier de SPIP si vous n’avez pas spécifié de dossier dans la variable $dossier_inclus (par défaut elle contient le dossier courant).

Dans votre squelette, vous devez avoir quelque chose du genre :

<BOUCLE_1 (ARTICLES) {id_article}>
  [(#TEXTE|autoriser_php)]
</BOUCLE_1>

J’ai appliqué le filtre "autoriser_php" à l’affichage de #TEXTE.

Et votre article affiche désormais :

Bonjour,
voici le résultat de ma fonction :
Hello World !

Hop

Pour aller un peu plus loin...

Imaginons que vous ayez besoin de récupérer une variable de l’url dans votre script. Les variables globales de SPIP sont accessibles depuis votre script, puisqu’il fonctionne à l’intérieur d’un filtre SPIP.

Regardez le script suivant

<?php
  // Ma variable
  $id_machin = $GLOBALS['id_machin'];
 
  $affichage_php = "Hello machin n°$id_machin";
?>

Je récupère la variable globale $id_machin et je l’affiche dans mon script. Cette variable globale est tout simplement une des variables passées en paramètres.

Si j’essaye l’url :
article.php3?id_article=x{{&id_machin=11}}

J’aurai alors l’affichage :

Bonjour,
voici le résultat de ma fonction :
Hello machin n°11

Hop

C’est d’autant plus pratique que SPIP va générer un cache pour TOUTES les url différentes.

Fort heureusement, sinon l’affichage de
article.php3 ?id_article=x&id_machin=1
serait le même que l’affichage de
article.php3 ?id_article=x&id_machin=2

puisque la page article.php3 ?id_article=x est à priori déjà dans le cache.

Attention toutefois à ne pas remplir votre cache de millions de fichiers si votre script peut comporter des millions de combinaisons de paramètres dans l’url !

Récupérer des variables globales de SPIP

En plus de pouvoir récupérer des variables de l’url, vous pouvez récupérer des variables de l’environnement SPIP, comme celle-ci :

$GLOBALS['spip_lang']

qui vous permet de récupérer la langue courante (si vous utilisez SPIP multilingue).
Ca peut en effet être très pratique si vous avez besoin de générer un affichage « localisé » avec votre script. [1]

Mise en garde avec MySQL

SPIP utilise par défaut la connexion courante à la base de données MySQL. Autrement dit, si dans votre script, vous ouvrez une base MySQL autre que celle utilisée par SPIP, celui-ci n’aura plus accès à sa base une fois le filtre exécuté.

Pour remédier à ca, il y a deux solutions :

-  Utiliser la base de SPIP. Pour avoir la base toujours ouverte au début de votre script, utilisez
include_ecrire( "inc_connect.php3") ;
En effet ce sript ouvre la base seulement si elle n’est pas déjà ouverte, et l’avantage c’est que vous n’avez pas besoin de gérer vous même les paramètres d’ouverture.

-  Demander à SPIP de faire des accès complets à la base (avec sélection de la base à chaque requête). Pour ca, renseignez la variable
$mysql_rappel_connexion = true ;
dans mes_options.php3 [2].

Exemple d’utilisation :

<?php
include_ecrire( "inc_connect.php3"); 
 
$ma_requete = mysql_query( "SELECT id, nom, prenom, DATE_FORMAT(naissance, '%d/%m/%Y') as naissance, FROM utilisateur ORDER BY nom,prenom");
if( $ma_requete) {
    if( mysql_num_rows($ma_requete) > 0) {
        $affichage_php .= "<table cellpadding=\"2\" align=\"center\" border=\"0\" class=\"spip\">\n";
        $affichage_php .= "<tr align=\"center\" class=\"row_first\"> <td><b>Nom</b></td> <td><b>Date de naissance</b></td> </tr>\n";
        while ($mon_resultat = mysql_fetch_array($ma_requete)) {
            $affichage_php .= "<tr class=\"row_" . ($ncr_numero_ligne++ % 2 ? 'odd' : 'even') . "\">";
            $affichage_php .= "<td>" . $mon_resultat["nom"] . " " . $mon_resultat["prenom"] . "</a></td> <td align=\"right\">" . $mon_resultat["naissance"] . "</td>";
            $affichage_php .= "</tr>\n";
        }
        $affichage_php .= "</table>\n";
    }
}
?>

Conclusion

Attention, ceci ne fonctionne que dans la partie publique évidemment !

J’utilise actuellement ce script sur mon site, et ca fonctionne plutôt bien ! Et ce qui est génial, c’est que le cache est géré correctement par SPIP.

Notez : la page est regénérée quand elle a expirée, et pas quand le résultat de votre script a changé !

Notes

[1Merci à Paolo pour l’info

[2Je l’indique pour information puisque je ne l’ai pas testé

Dernière modification de cette page le 30 novembre 2012

Discussion

46 discussions

  • Bonjour,
    je suis un habitué du php mais je débute sur spip et je dois dire que ce tutoriel est très mal fait, il en manque un bout pour comprendre.
    Il faudrait un tuto plus progressif et plus intuitif. Merci

    Répondre à ce message

  • mendesrocc

    Bonjour,
    Ce serait génial de pouvoir faire ce qui est indiqué dans l’article mais pour moi cela ne fonctionne pas même pour l’exemple donné. le texte statique s’affiche mais pas la variable d’environnement.
    mon script :

    $GLOBALS[’spip_lang’] ;

    #

    $id_machin = $GLOBALS[’id_machin’] ;

    #

    le positionnement du filtre :

    — perso : Utilisation zone PS pour appliquer filtre au texte —>
    #DEBUT_SURLIGNE[

    (#CHAPO)

    ][

    (#TEXTE|autoriser_php|reduire_image[(#PS)])

    ]

    (#PS)

    ]—>[

    (#NOTES)

    ]#FIN_SURLIGNE

    le résultat :

    Hello machin n°

    Ps : désolé je suis un peu obsolète en version spip 1.8.2 d

    Répondre à ce message

  • 7

    inclure des php ca marche, mais pour les HTML, y a t il une manoeuvre spéciale ?

    quand j’inclus mon fichier HTML, a l’affichage son contenu se trouve avant celui de la boucle

    par exemple dans mon article je mets :

    avant

    #INCLURE(test.html)

    apres

    et a l’affichage j’obtient

    contenu de test.html

    avant

    apres

    • Philippe G.

      J’ai le même problème : le texte inséré se place AU-DESSUS du cadre de la page ! (La variable $texte ne contient qu’un #INCLURE...)

    • Philippe G.

      Allo ???
      Il y a quelqu’un ??

    • C’est normal !!!

      « Vous ne pouvez pas vous permettre d’afficher sauvagement vos informations directement par un echo( ), celles-ci ne seraient pas prises en compte dans le cache de SPIP, et souvenez-vous que votre script travaille à l’intérieur d’un filtre, et qu’il y a peut être d’autres filtres qui attendent derrière :-) »

      C’est pourquoi vous pouvez utiliser la fonction

      ob_start();

      avant d’envoyer le fichier HTML et

      $affichage_php = ob_get_contents();

      pour récupérer le fichier HTML et le passer à SPIP

    • cette réponse du forum mériterait d’être intégré dans l’article, car ça peut permettre d’inclure des pages html à la volée lorsqu’on rédige un article, puissant. voir même des boucles spip ?

      une piste pour tester ?

    • Je ne comprend pas cette réponse, où dois-je mettre les fonctions ob_start() et $affichage_php = ob_get_contents() ? Dans le squelette ?

      Florence

    • Bonsoir,

      j’ai positionné les appels des fonctions ob_start() ; et ob_get_contents() ; comme suit dans le fichier mes_fonctions.php :

      function autoriser_php( $texte) {
      
           ...
      
              if( $autorise == true) {
                    // Verifie que le fichier existe
                    if( file_exists ( $dossier_inclus . $resultats[3])) {
                           // Vide le buffer de sortie
                           $affichage_php = '';
                           // Et lance le fichier inclu !!!i
      
      ob_start();
      
                           include( $dossier_inclus . $resultats[3]);
                    } else {
                           $affichage_php = "<b>#INCLURE: Le fichier de script n'existe pas !</b>";
                    }
             } else {
                    $affichage_php = "<b>#INCLURE: Script NON autoris&eacute; !</b>";
             }
             // Attention, n'effectue qu'un seul remplacement à la fois !
      
      
      $affichage_php = ob_get_contents();
      ob_end_clean();
      
             
             $texte = preg_replace( $chaine_recherche, $affichage_php, $texte, 1);

      Et cela semble fonctionner ...

      G.

    • Bonjour,

      J’ai aussi le problème d’affichage du HTML. Il s’affiche au début hors cadre. J’ai essayé d’utiliser les fonctions ob_start() ; et ob_get_contents() dans mes_fonctions.php comme c’est indiqué ci-dessus, mais là, je n’ai plus rien qui s’affiche. J’ai juste la ligne #INCLURE(mon_fichier.html).
      J’utilise SPIP version 1.9.2c avec la squelette Alternatives
      Quelqu’un a une idée.
      Merci d’avance

    Répondre à ce message

  • 3

    Cet article est obsolète ou à reserver dans le cadre d’un usage sur les version 1.8.x ou inférieures.

    En version de SPIP 1.9.x et suivantes, on utilisera bien evidemment la méthode érpouvée et supportée des modeles qui permettent d’inclure le résultat d’un squelette dans un article :
    le contenu d’un squelette modeles/annuaire.html peut être affiché dans l’article avec un simple tag <annuaireXX> ou <annuaire|id_machin=truc>

    Le tag doit comporter un numero d’identifiant (celui de l’article en cours par exemple) ou un | afin de ne pas être confondu avec une balise html.

    Libre à vous de mettre ce que vous voulez dans ce squelette, y compris du php.

    • Merci de la précision, l’article à donc été basculé en archives et taggé de même.

      @+ NicolasR

    • Bonjour,

      Judicieux, mais lorsque je passe par cette méthode <nomdufichierscriptphpXXX> où XXX est le numéro de l’article et « nomdufichierscriptphp » le modèle, j’ai l’erreur suivante :

      Fatal error : Cannot redeclare adv_showlinks() (previously declared in /var/www/vhosts/nomsite.com/httpdocs/ecrire/public/assembler.php(398) : eval()’d code:52) in /var/www/vhosts/nomsite.com/httpdocs/ecrire/public/assembler.php(398) : eval()’d code on line 52

      Une idée ?

    • jean-eric

      J’essaye de savoir comment faire la chose suivante : ayant un article qui décrit un phénomène physique, je voudrais que le lecture puisse entrer une ou plusieurs variables numériques afin que l’article calcule des valeurs qui mettront à jour celles par défaut de l’article.

      Est-ce possible ? Est-ce réalisable (et comment) ?

      comme dit la pub...

    Répondre à ce message

  • 4

    Bonjour à tous,

    Je parviens bien à inclure du php dans un article
    (par exemple mon_premier_script.php3 marche sans problème).

    Par contre, j’ai plus de soucis si j’utilise une base de données MySQL autre que celle de SPIP : j’ai créé une base
    « Annuaire » contenant une table « Personnel » dans laquelle j’effectue des recherches :
    Voici le début du script (la fin étant l’affichage du résultat grace a $affichage_php) :

    <?php
      include_ecrire
    "inc_connect.php3" );
      
                                                                                                                                                                                                                                                                                                                       
    define ('NOM',"root");
      
    define ('PASSE'"");
      
    define ('SERVEUR'"localhost");
      
    define ('BASE'"Annuaire");

      
    $requete "SELECT * FROM Personnel " ;
                                                                                                         
      
    $connexion mysql_pconnect (SERVEURNOMPASSE);
                                                                                                         
      
    mysql_select_db (BASE$connexion);
                                                                                                         
    // Exécution et affichage de la requête
                                                                                                         
      
    $resultat mysql_query ($requete$connexion);
                                                                                                         
                                                                                                         
      while ( (
    $personne mysql_fetch_object ($resultat)))
    // affichage du resultat .... 

    ?>

    Résultat : messages d’erreur dans l’article SPIP du type :


    Erreur dans la requête envoyée à MySQL :
    SELECT documents.*,types_d.titre AS type_document,types_d.extension AS extension_document,documents.* FROM spip_documents AS documents,spip_types_documents AS types_d,spip_documents_articles AS rel_documents WHERE documents.id_type = types_d.id_type AND documents.id_document=rel_documents.id_document AND rel_documents.id_article=’418’ AND documents.mode=’document’ AND documents.taille > 0 GROUP BY documents.id_document
    > Table ’Annuaire.spip_documents’ doesn’t exist

    Quelqu’un pourrait m’éclairer ?
    Merci d’avance.

    • Je l’explique dans l’article (au chapitre mise en garde avec MySQL).

      SPIP utilise la connexion COURANTE au serveur MySQL. Donc comme tu fais une connexion à ta base perso, il va essayer ensuite de chercher ses données dedans.

      Il faut pour celà demander à SPIP de faire des connexion complètes (et donc de sélectionner la base à chaque requête) en ajoutant

      $mysql_rappel_connexion = true ;

      dans le fichier mes_options.php3

      Voilà !

    • Merci pour ces précisions.

      J’ai donc supprimé « include_ecrire (inc_connect.php3) » et
      j’ai ajouté ce que tu m’as dit dans mes_options.php3.

      Malheureusement, cela n’a rien changé, j’ai les
      memes erreurs.

    • Rectificatif : ça marche maintenant.

      J’avais créé le fichier mes_options.php3 dans la racine
      du site (comme le fichier mes_fonctions.php3)
      au lieu de le mettre dans le répertoire ecrire

      Merci beaucoup pour ton aide !

    • bsr,

      Je sais qu’il est tard par rapport à l’article mais j’aimerais réaliser moi aussi un connexion à une deuxième bdd, voilà ce qu’est mon script :

      j’ai créé une base "bazespip2, sur laquelle j’ai créé une table test

      <?php 

        define 
      ('SERVEUR'"localhost");
        
      define ('NOM',"-----");
        
      define ('PASSE'"------");
        
      define ('BASE'"------");

      $connexion mysql_connect (SERVEURNOMPASSBASE);
      $ma_requete mysql_query ("SELECT * FROM test ");

      if( 
      $ma_requete) {
          if( 
      mysql_num_rows($ma_requete) > 0) {
              
      $affichage_php .= "<table cellpadding=\"2\" align=\"center\" border=\"0\" class=\"spip\">\n";
              
      $affichage_php .= "<tr align=\"center\" class=\"row_first\"> <td><b>Nom</b></td> <td><b>Deskriptif</b></td> </tr>\n";
              while (
      $mon_resultat mysql_fetch_array($ma_requete)) {
                  
      $affichage_php .= "<tr class=\"row_" . ($ncr_numero_ligne++ % 'odd' 'even') . "\">";
                  
      $affichage_php .= "<td>" $mon_resultat["nom"] . "" $mon_resultat["prenom"] . "</td> <td align=\"right\">" $mon_resultat["deskript"] . "</td>";
                  
      $affichage_php .= "</tr>\n";
              }
              
      $affichage_php .= "</table>\n";
          }
      }
      ?>

      après insertion de l’inclure dans l’article, je n’arrive a afficher aucune donnée, de la deuxieme table

      help me svp :-(

    Répondre à ce message

  • bonjour, et un grand merci à GoUaRfIg

    Ce script est tout bonnement fantastik, je l’utilise sur deux sites diffrérents,

    un tout petit bémole cependant, je n’arrive pas à regler un problème d’affichage de caractères accentués et ce sur deux sites (et donc deux serveurs) différents. j’ai des points d’interrogation et ce uniquement dans les aticles faisant appel au script
    Quelqu’un aurait un idée ?

    Répondre à ce message

  • 5

    Bonjour,

    Voilà une fonction qui m’intéresse bigrement : proposer un annuaire actualisé des membres de mon association, directement au sein d’un article SPIP (notamment pour pouvoir utiliser le plug-in accès restreint et contrôler l’accès à l’annuaire grâce à ça).

    Seulement voilà, je suis passé en SPIP 1.9.1 ; est-ce que quelqu’un a testé cet article avec SPIP 1.9.1 ? Que faire pour l’adapter ?

    Merci !

    • Bonsoir,

      Si ton annuaire est dans une table à côté des tables spip, pourquoi ne pas faire directement une boucle sur cette table pour l’afficher ? C’est très simple avec la version 1.9.1.

      <BOUCLE_ligneannuaire(matableannuaire){par societe, nom}>
      Société : #SOCIETE, Nom : #NOM, tél : #TEL
      </BOUCLE_ligneannuaire>

      Cette boucle te permet de lister toute la table “matableannuaire”, où societe, nom, tel sont les champs que tu souhaites afficher.

      Pour ma part j’utilise cette fonctionnalité et je me suis préparé un petit plugin (tableData) pour gérer le contenu de ces tables dans la zone privée.

      C’est une solution alternative simple, il me semble.

      Christophe

    • Je ne savais pas qu’on pouvait mettre une boucle dans le texte d’un article... Ou alors j’ai pas compris ? En tout cas sur mon site ça ne fonctionne pas ; j’ai indiqué

      <BOUCLE_annuaire(membres){par nom}>
      #PRENOM, #NOM
      </BOUCLE_annuaire>

      dans le champ « texte » de l’article qui doit afficher mon annuaire ; ça affiche

      par nom> #PRENOM, #NOM

      est-ce normal ? Ai-je loupé quelque chose ? En tout cas merci pour la réponse, si j’arrive à le faire marché ça semble génial :)

    • OK j’ai compris la manip : il faut créer un modèle personnalisé, avec la boucle comme tu le suggères, et l’appeler dans l’article en question. Merci pour le coup de pouce, ça marche !

    • Bonjour,

      Je voudrais effectuer exactement cette opération, mais je ne comprends pas ce que tu entends par « créer un modèle personnalisé ». Si quelqu’un pouvait m’expliquer la démarche, ca serait cool...

      Merci

    • Ca veut dire un squelette personnalisé pour l’article en question, avec une boucle spécifique à l’intérieur selon modèle donné ci-dessus.
      Ca fonctionne bien et c’est d’une simplicité enfantine.
      En revanche, j’ai un problème d’affichage : les caractères accentués ne s’affichent pas bien. Je suppose que je dois paramétrer le codage de ma table sql d’une certaine manière, ou transformer en html les données issues de cette table avant affichage.
      Je ne vois pas très bien comment faire présentement.
      Une idée ?

    Répondre à ce message

  • 2
    rzawutang44

    Salut,

    Deux précisions, prenez bien soin de NE PAS :

    1. Changer le nom de la variable d’affichage ($affichage_php) puisque c’est précisément le nom utilisé dans le filtre autoriser_php (mes_fonctions.php).

    2. Faire de echo dans vos scripts autorisés (mais c’est déjà dit dans le tutoriel)

    • Je ne comprends absolument pas la recommandation « ne pas faire des “echo” » dans les scripts autorisés

      Je n’ai pas changé une seule instruction (surtout pas les "echo") de mes scripts php déjà existants, et cela fonctionne parfaitement en utilisant la fonction proposée par l’auteur de l’article initial, à laquelle j’ai juste ajouté :

      • les instructions ob_start() ; et ob_get_contents() ; comme indiqué dans une réponse à une question dans ce même forum.
      • la lecture automatisée des fichiers autorisés dans le répertoire désigné

      (Cf. ma réponse à l’article initial pour voir cette version modifiée)

      En tout cas, encore merci à tous....

    • Si je peux mettre des “echo” sans problème, c’est grâce à

      • ob_start() ;
      • ob_get_contents() ;

      qui permettent la prise en compte de ces instructions dans le cache de SPIP

      C’est quand même (à mon sens) plus pratique que de modifier tous les "echo" d’un script, surtout pendant sa mise au point.

    Répondre à ce message

  • Bonjour,
    J’ai bien compris ce script qui permet de lancer un script dans un article.
    J’ai bien perçu l’intérêt de pouvoir afficher un annuaire complet sous forme de liste.
    Mais est-il possible de créer des articles à la volée qui affichent des éléments particuliers ?
    MERCI.

    Répondre à ce message

  • 1

    Bonjour,
    Cela fait presque une semaine que je cherche.
    moi je veux Lancer un script PHP dans le sommaire.html et non dans un article

    J’ai un script toto.php que je veux inclure dans mes squellet, avec insertion direct du scripte <? include ...?>
    cela marche bien sauf dans le sommaire car le code html de celui-ci (enfin je pense) n’est pas entouré des boucle principal <boucle_principaleXXX
    Car je ne sais pas que mettre dans XXX

    Comment alors inséré le code php ?

    Merci de votre réponse

    • rzawutang44

      1.Tu crées un article (numero 81 par exemple). Dans le champ TEXTE tu mets :
      INCLURE (mon_script.php);

      2. A l’endroit voulu dans squelettes/sommaire.html , tu fais afficher son contenu :

      <BOUCLE_article_pour_mon_script {id_article=81}>
      [(#TEXTE|autoriser_php)]
      </BOUCLE_article_pour_mon_script {id_article=81}>

      Voila, ca marche ?

    Répondre à ce message

Ajouter un commentaire

Qui êtes-vous ?

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