SPIP - Contrib

[ar] [en] [es] [fr] [it]



Accueil du site > Interactivité, communication > Archives Interactivité, communication

Lancer un script PHP dans un article

vendredi 23 avril 2004, par GoUaRfIg !. Dernier ajout dimanche 9 décembre 2007


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 »

  1.  
  2. /*****************************************************************************/
  3. /**  Cette fonction permet de lancer un script PHP dans un article
  4. /**
  5. /**  La syntaxe est la suivante :
  6. /**    #INCLURE ( nom_fichier )
  7. /**
  8. /**  Auteur  : F. Quointeau
  9. /**  Version : 0.0.2
  10. /**  Date    : 16 Mai 2004
  11. /*****************************************************************************/
  12. function autoriser_php( $texte) {
  13.  
  14.     // Dossier où sont stockés les scripts
  15.     $dossier_inclus = './';
  16.    
  17.     // Liste des scripts autorisés
  18.     $scripts_autorises = Array(
  19.         'mon_premier_script.php3',
  20.         'mon_second_script.php3'
  21.     );
  22.  
  23.    
  24.     // Les fichiers inclus autorises sont : *.php, *.php3, *.php4, *.phtml, *.htm, *.html, *.inc
  25.     $chaine_recherche = '/#INCLU[R|D]E( *)\(( *)([^\)]*\.(php|php3|php4|phtml|htm|html|inc))( *)\)/i';
  26.    
  27.     // Recherche la chaine #INCLUDE(script)
  28.     while( preg_match( $chaine_recherche, $texte, $resultats)) {
  29.         // Verifie le droit d'inclure ce fichier script !
  30.         $autorise = false;
  31.         reset( $scripts_autorises);
  32.         while( $script = each( $scripts_autorises)) {
  33.             if( strcasecmp( $script[value], $resultats[3]) == 0) $autorise = true;
  34.         }
  35.         if( $autorise == true) {
  36.             // Verifie que le fichier existe
  37.             if( file_exists ( $dossier_inclus . $resultats[3])) {
  38.                 // Vide le buffer de sortie
  39.                 $affichage_php = '';
  40.                 // Et lance le fichier inclu !!!
  41.                 include( $dossier_inclus . $resultats[3]);
  42.             } else {
  43.                 $affichage_php = "<b>#INCLURE: Le fichier de script n'existe pas !</b>";
  44.             }
  45.         } else {
  46.             $affichage_php = "<b>#INCLURE: Script NON autoris&eacute; !</b>";
  47.         }
  48.         // Attention, n'effectue qu'un seul remplacement à la fois !
  49.         $texte = preg_replace( $chaine_recherche, $affichage_php, $texte, 1);
  50.     }
  51.    
  52.     return( $texte);
  53. }
  54.  

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 :

  1.  
  2. <?php
  3.     echo( "Hello World !");
  4. ?>
  5.  

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

  1.  
  2. <?php
  3.     $affichage_php = "Hello World !";
  4. ?>
  5.  

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

  1.  
  2. <?php
  3.   // Ma variable
  4.   $id_machin = $GLOBALS['id_machin'];
  5.  
  6.   $affichage_php = "Hello machin n°$id_machin";
  7. ?>
  8.  

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 :

  1.  
  2. <?php
  3. include_ecrire( "inc_connect.php3");
  4.    
  5. $ma_requete = mysql_query( "SELECT id, nom, prenom, DATE_FORMAT(naissance, '%d/%m/%Y') as naissance, FROM utilisateur ORDER BY nom,prenom");
  6. if( $ma_requete) {
  7.     if( mysql_num_rows($ma_requete) > 0) {
  8.         $affichage_php .= "<table cellpadding=\"2\" align=\"center\" border=\"0\" class=\"spip\">\n";
  9.         $affichage_php .= "<tr align=\"center\" class=\"row_first\"> <td><b>Nom</b></td> <td><b>Date de naissance</b></td> </tr>\n";
  10.         while ($mon_resultat = mysql_fetch_array($ma_requete)) {
  11.             $affichage_php .= "<tr class=\"row_" . ($ncr_numero_ligne++ % 2 ? 'odd' : 'even') . "\">";
  12.             $affichage_php .= "<td>" . $mon_resultat["nom"] . " " . $mon_resultat["prenom"] . "</a></td> <td align=\"right\">" . $mon_resultat["naissance"] . "</td>";
  13.             $affichage_php .= "</tr>\n";
  14.         }
  15.         $affichage_php .= "</table>\n";
  16.     }
  17. }
  18. ?>
  19.  

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

[1] Merci à Paolo pour l’info

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


Répondre à cet article

  • Lancer un script PHP dans un article

    13 juillet 2007 11:10, par 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)

    Répondre à ce message

    • Lancer un script PHP dans un article 25 août 2007 00:13, par Michel

      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....

      Répondre à ce message

      • mais c’est bien sûr... 4 septembre 2007 00:44, par Michel

        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

    • 関西 風俗—大阪(梅田、難波、日本橋、谷町九丁目、十三)、京都、神戸などの関西地域の風俗総合情報サイトFu-joy(フージョイ)!
      大阪 セクキャバ—梅田のM男の聖地へようこそ
      名古屋 セクキャバ—名古屋の錦で「H」にハジけて遊べる

      Répondre à ce message

    Retour au début des forums

  • 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

    Retour au début des forums

  • 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

    Répondre à ce message

    • > Lancer un script PHP dans un article 27 mai 2005 19:15, par 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...)

      Répondre à ce message

    • > Lancer un script PHP dans un article 31 mai 2005 20:32, par GoUaRfIg !

      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

      Répondre à ce message

      • fonctionnement de ob_start 8 décembre 2005 21:48, par DoriaN

        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 ?

        Répondre à ce message

      • > Lancer un script PHP dans un article 16 janvier 2006 20:23, par Florence

        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

        Répondre à ce message

        • > Lancer un script PHP dans un article 10 février 2007 00:44, par yaumgui

          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.

          Répondre à ce message

          • > Lancer un script PHP dans un article 22 février 2008 00:39, par Infoctet

            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

    Retour au début des forums

  • OBSOLETE

    9 décembre 2007 11:11, par Cédric

    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.

    Répondre à ce message

    • OBSOLETE - basculé en archives 9 décembre 2007 15:13, par NicolasR

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

      @+ NicolasR

      Répondre à ce message

    • OBSOLETE 29 janvier 2008 08:32, par cb

      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 ?

      Répondre à ce message

    • variables dynamiques 20 février 2008 15:33, par 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

    Retour au début des forums

  • Bonjour, et bravo pour cette astuce du tonnerre !

    Toutefois, j’ai suivi les indications à la lettre et je n’obtiens pas le résultat voulu.
    Voyez par vous même : http://www.logiktribe.free.fr/spip.php ?article9

    Voici les étapes que j’ai suivies :

    1- J’ai publié mon article :
    #INCLURE (mon_script.php)

    2- J’ai édité le fichier “mes_fonctions.php” :
    $dossier_inclus = ’dossier_du_script/’ ;
    $scripts_autorises = Array(
    ’mon_script.php’
    ) ;

    3- “mon_script.php” est le suivant :
    <?php
    include ("http://monsite/../index.php");
    ?>

    4- Et j’ai édité le fichier “article.html” de mon squelette :
    (#TEXTE|autoriser_php)

    Voilà, j’éspère que mes explications sont assez claires.
    Je sent bien que je suis à deux doigts de résoudre ce disfonctionnement, mais je n’y arrive vraiment pas

    Merci d’avance au spip(eur/euse) qui voudra bien me sortir de ce mauvais pas.
    A bientôt.

    Répondre à ce message

    Retour au début des forums

  • > Lancer un script PHP dans un article

    28 mai 2004 11:44, par Sam

    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.

    Répondre à ce message

    • > Lancer un script PHP dans un article 28 mai 2004 11:52, par gouarfig

      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à !

      Répondre à ce message

      • > Lancer un script PHP dans un article 28 mai 2004 12:57, par Sam

        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.

        Répondre à ce message

        • > Lancer un script PHP dans un article 28 mai 2004 13:22, par Sam

          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 !

          Répondre à ce message

    • > Lancer un script PHP dans un article 11 décembre 2007 22:38, par erik

      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

    Retour au début des forums

  • Lancer un script PHP dans un article

    9 décembre 2007 08:50, par nerrik

    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

    Retour au début des forums

  • Lancer un script PHP dans un article

    16 septembre 2007 09:52, par Aurore

    Bonjour,

    J’utilise la version 1.9.2 de SPIP. J’ai suivi à la lettre votre explication. Mais il ne se passe rien, le script php est trouvé mais il ne s’affiche pas.

    Avez-vous déjà testé ce type d’inclusion dans un article sur cette version de SPIP, quelle solutions sont possibles pour faire la même action dans cette version de SPIP ?

    Je précise : j’ai bien créé un fichier mes_fontions.php à la racine du site avec successivement le script de GoUaRfIg ! puis de Michel

    J’ai créé un script de test : testscript.php que j’ai mis dans un dossier mes_scripts à la racine du site qui contient juste : <?php
    $affichage_php 
    "Hello World !";
    echo 
    "hello the world";
    ?>

    Dans mon article, j’ai mis seulement : #INCLURE(mes_scripts/testscript.php)

    Dans le squelette je fais l’appel dans une boucle article vers le numéro exact de l’article : «  [(#TEXTE|autoriser_php)]  »

    Concrètement, il ne met pas d’erreur, ce qui signifie qu’il trouve le script. Mais il ne l’interprête pas. Pourquoi ? une histoire de cache ? de délai ????

    Répondre à ce message

    • Lancer un script PHP dans un article 18 septembre 2007 00:56, par Michel

      à mon sens, si la déclaration dans mes_fonctions.php est déjà

      $dossier_inclus = ’mes_scripts/’ ;

      il ne faut mettre dans l’article que :

      #INCLURE(testscript.php)


      Attention, si tu as utilisé le script initial de GoUaRfIg, il faut en plus déclarer

      $scripts_autorises = Array(
      ’testscript.php’
      ) ;


      Dans la version modifiée que j’ai proposée :
      • cette dernière déclaration est inutile puisque la routine va lire le contenu du répertoire “mes_scripts” pour renseigner le tableau “$scripts_autorises
      • la variable “$affichage_php” ne doit pas être utilisée (elle n’affiche rien !), on utilise normalement “echo”.

      J’ai notamment utilisé cette fonctionnalité pour lire et mettre en page des tableaux Excel au format .csv sur cette page dont l’unique contenu est “#INCLURE (bretagne.php)”

      Répondre à ce message

      • Lancer un script PHP dans un article 18 septembre 2007 18:22, par Aurore

        Merci Michel,

        C’était effectivement un problème de déclaration de dossier en double..... 1 fois dans mes_fonctions.php puis ensuite dans l’article.

        ouf,

        Merci beaucoup :)

        Répondre à ce message

      • Lancer un script PHP dans un article 24 septembre 2007 19:08, par Philippe Guérindon

        Bonjour, J’ai lu avec intérêt vos récents posts. J’utilise le squelette Sarka-Spip version 2.0.1 avec Spip 1.9.2c et je n’arrive pas à inclure du code php dans les articles quelque soit la méthode. Une idée. Merci. Philippe

        Répondre à ce message

        • Lancer un script PHP dans un article 24 septembre 2007 19:57, par Michel

          Difficile de répondre dans l’absolu....

          J’ai moi même galèré avant d’y arriver (et je ne suis pas le seul....)

          Il y a plusieurs sources d’erreurs possibles !!!

          • dans le squelette article.html :

          Bien mettre [(#TEXTE|autoriser_php)] dans la boucle des articles

          • dans le fichier mes_fonctions.php :

          Bien indiquer le chemin des fichiers autorisés (à partir de la racine du site dans laquelle se trouve "spip.php" et non à partir du dossier des squelettes)
          (il faut terminer par un /)

          Une copie (même partielle) de ce qui a été fait qui ne fonctionne pas (comme l’a fait Aurore), et l’indication de la variante utilisée pour "mes_fonctions.php" pourrait nous éclairer.... il suffit parfois de pas grand chose.... (comme d’hab. en informatique)

          Répondre à ce message

          • Bonjour, Mon problème venait du squelette Sarka-Spip 2. L’implémentation est un peu différente dans ce cas.

            Les fonctions personnelles doivent être placées dans le fichier "sarkaspip_fonctions.php" et j’ai modifié le chemin de $dossier_inclus pour pointer vers ../spip/inc/ :

            $dossier_inclus = ’/inc/’ ;

            Le fichier article.php du squelette doit être modifié comme suit dans la zone “corps de l’article” :

            (#TEXTE|autoriser_php|typo_couleur|image_reduire#CONFIGtaille_preview)]

            Merci pour l’aide. Il fallait mettre les mains dans le camboui. Philippe

            Répondre à ce message

    Retour au début des forums

  • SPIP 1.9.1 ?

    12 février 2007 21:35, par Ziggy

    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 !

    Répondre à ce message

    • SPIP 1.9.1 ? 13 février 2007 00:04, par chbtn

      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

      Répondre à ce message

      • SPIP 1.9.1 ? 13 février 2007 22:35, par Ziggy

        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 :)

        Répondre à ce message

        • SPIP 1.9.1 : compris ! 14 février 2007 10:22, par Ziggy

          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 !

          Répondre à ce message

          • SPIP 1.9.1 : pas compris ! 3 avril 2007 10:25, par Touig

            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

            Répondre à ce message

            • SPIP 1.9.1 : pas compris ! 6 septembre 2007 16:15, par verniber

              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

    Retour au début des forums

  • 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

    Retour au début des forums

  • Lancer un script PHP dans un article

    20 août 2007 16:56, par Michel

    Merci à tous les contributeurs

    En faisant une synthèse de tout ce que j’ai pu lire ici, ça fonctionne parfaitement...., pour du php comme du html

    J’ai choisi de placer mes scripts dans un dossier "inc/" placé dans le même dossier que "spip.php" et qui peut être protégé par un hichier ".htaccess" contenant uniquement "deny from all"
    De ce fait, le seul accès à ce dossier se fait par FTP, donc par le webmaster, et la protection peut être considérée comme suffisante.

    J’ai donc automatisé la recherche des fichiers présents dans ce répertoire qui évite de modifier le fichier mes_fonctions.php à chaque ajout de fichier à inclure

    Voici le résultat le plus abouti de ma réflexion... d’autres améliorations sont certainement encore possibles

    Le code ci-dessous doit bien sûr être placé “mes_fonctions.php

    Remarque importante :
    Tous les liens contenus dans les fichiers inclus devront, pour le chemin, être libellés comme si ce fichier à inclure se trouvait dans “spip.php”
    Et rien n’empèche d’inclure, par la fonction Php include() , d’autres fichiers contenus dans d’autres répertoires, toujours en respectant cette règle

    <?php
    /*************************************************************/
    /**  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
    /*****************************************************************/

    /*****************************************************************
          Aménagements : Michel MAILLARD - 20 Août 2007

        * recherche automatisée des fichiers dans le dossier de stockage
         * ajout des fonctions ob_....() 
               (pour assurer l'affichage à l'emplacement désiré et non en haut de page)
        * variable $f pour le fichier inclus 
            &