SPIP - Contrib

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



Accueil du site > Outils pour squelettes > Tutoriaux pour squelettes

SPIP, PHP et Javascript sont dans un bateau

Vu du dedans, c’est comment ? Le barreur, le rameur et la sirène..., et le vent dans le cache....

samedi 11 janvier 2003, par Jean Luc Girard. Dernier ajout jeudi 26 octobre 2006


Comment se passe la cohabitation entre le source SPIP, PHP et javascript dans un squelette ? C’est possible pour plus de puissance et de souplesse dans le développement d’extensions spécifiques, de combiner spip à php. Toutefois tout n’est pas possible n’importe comment ! Attention donc aux bonnes manières !

Pour pas perdre des jours et des jours à débugger une boucle qui ne donne rien, toute la question à examiner est : dans quel ordre ça se passe ? à partir de quel fichier (cache ou pas cache) ? et à quel moment ?


Au début il y a le squelette

Supposons donc un squelette dans lequel se mêlent avec allégresse les instructions de diverses natures : HTML bien sûr, SPIP aussi, mais aussi PHP et Javascript.

Bien sûr, dans un coin du site, il y a aussi la base de données MySQL qui contient les infos « contenu » des articles.

Puis souffle le vent dans le cache

Ensuite il faut savoir qu’il y a un cache avec SPIP : chaque page est précalculée lors de son premier affichage. Ce résultat est stocké dans le cache, et c’est ce cache qui est ensuite appelé pour affichage.

La moulinette SPIP ne fait QUE traiter le code SPIP. Pour chaque boucle, SPIP interroge la base de données et génère en ligne le résultat (développé) correspondant aux réponses de la requête générée par la boucle et appliquée à la base de données.

A bord du cache

Dans le cache, il n’y a plus aucune instruction SPIP, car elles ont toutes été calculées. Par contre, il y a encore tout le code PHP et Javascript qui est traité par SPIP exactement comme du simple texte, au même titre que du HTML.

Il y a 2 conséquences à cela :
- si du code PHP ou jajascript est contenu dans les critères d’une boucle, il ne sera PAS exécuté et ne pourra PAS être pris en compte dans le calcul de la boucle. Le résultat sera donc erroné.
- si du code PHP ou jajascript est contenu à l’intérieur du corps d’une boucle, il sera dupliqué en autant d’exemplaires que la boucle fera d’itérations, exactement comme tout le reste du contenu. Il s’exécutera donc à chaque fois.

Pour l’affichage

C’est le contenu du cache qui est appelé.
- Le contenu PHP s’exécute sur le serveur et génère la page que reçoit le navigateur de l’utilisateur (c’est pour lui qu’on fait tout ça, faut pas l’oublier !).
- le contenu Javascript s’exécute dans le navigateur.

Ouf !

En conclusion

Pour bien mélanger PHP, Javascript et SPIP, il faut se souvenir de l’ordre de préséance entre eux :
- SPIP d’abord développe les boucles
- le cache mémorise ce résultat intermédiaire
- PHP exécute le cache et sert la page
- Javascript s’exécute dans le navigateur

Le motto ce serait donc :

Spip d’abord !

P.-S.

Des exemples, exceptions et contournements possibles pourraient être présentés dans d’autres articles.

Note des admins : faites attention à ne pas confondre Java et Javascript, cela n’a rien à voir !


Répondre à cet article

  • SPIP, PHP et Javascript sont dans un bateau

    11 octobre 2007 18:29, par Goosboow

    Bonjour tout le monde !

    J’aimerai insérer un script java dans un article. J’ai essayé la méthode "article333.html" Mais elle ne fonctionne pas !

    Voici le script que j’aimerai insérer !

    <script language="JavaScript" type="text/javascript" src="http://www.pcastuces.com/xml/rss2javascript.asp?flux=logitheque&nb=15&description=1" charset="ISO-8859-1"></script>

    Est ce que quelqu’un pourrait m’aider ? MERCI

    Répondre à ce message

    Retour au début des forums

  • Bonjour à tous,

    J’utilise un peu de PHP pour tester et j’avoue être perplexe dans l’ordre des traitements.
    Je pars d’un cas fonctionnel qui est (je vous passe les boucles) :

    [<a href="#URL_SITE_SPIP/#URL_ARTICLE"[ title="(#DESCRIPTIF|supprimer_tags)"]>
    (#FICHIER|image_reduire{140,0}|inserer_attribut{alt,[(#TITRE|couper{80}|texte_backend)]})
    #_annonces_art_img:TITRE
    </a>]

    et je le transforme en variable PHP directement que j’aimerais exploiter après... bref voila les tests
    1- celui qui fonctionne mais m’affiche des crochets [ ] avant et après le lien

    $tab['code'][$i] = ( '[<a href="#URL_SITE_SPIP/#URL_ARTICLE"[ title="(#DESCRIPTIF|supprimer_tags)"]>
    #_annonces_art_img:TITRE
    </a>]');


    2- celui qui ne fonctionne pas et m’affiche une belle erreur

    $tab['code'][$i] = ( '[<a href="#URL_SITE_SPIP/#URL_ARTICLE"[ title="(#DESCRIPTIF|supprimer_tags)"]>
    [(#FICHIER|image_reduire{140,0}|inserer_attribut{alt, [(#TITRE|couper{80}|texte_backend)]})]
    </a>]');


    3- en simplifiant le cas 2, j’arrive à afficher le chemin et nom de l’image

    $tab['code'][$i] = ( '[<a href="#URL_SITE_SPIP/#URL_ARTICLE"[ title="(#DESCRIPTIF|supprimer_tags)"]>
    #FICHIER
    </a>]');


    Bref... pour les textes, ça fonctionne mais pour les images, le meilleur que j’ai eu c’est d’arriver à juste afficher le chemin de l’image (pas mieux)...

    - Comment SPIP travaille-t-il au niveau des images ?
    - Quelqu’un peut-il m’aider à me sortir de ce pas ?

    Merci d’avance

    Répondre à ce message

    Retour au début des forums

  • SPIP, PHP et Javascript sont dans un bateau

    18 mars 2007 19:45, par Marc

    Bonjour, j’ai récupéré sur internet un petit compteur de visites à cette adresse : http://www.webmasters-debutants.com/index.php ?page=14

    J’essaye en vain d’intégrer le code php dans mon squelette, trés précisement ce code :

    <?php
    include("Visites/visite.php");
    echo
    "$compteur_c connectés<br>
    aujourdhui $compteur_j visiteurs<br>
    et $compteur visiteurs au total<br>
    Record de connectés: $A['compteur_records'] le $A['compteur_records_date']<br>
    Record du jour : $A['compteur_records2'] le $A['compteur_records_date2']"
    ;
    ?>

    Mais rien ne fonctionne. J’ai même une erreur "parse" quelque chose. Je suis en spip 1.9.1 Pourriez vous m’aider svp ? Merci.

    Répondre à ce message

    Retour au début des forums

  • SPIP, PHP et Javascript sont dans un bateau

    19 février 2007 22:54, par jojo

    J’ai besoin de mettre un peu de javascript dans un modele et je me retrouve toujours avec

     &lt;script language
    ................
     &lt;/script>
    dans le code source de la page et donc impossible d'exécuter le javascript.

    Par contre dans un squelette pas de probléme. Quelqu’un saurait-il pourquoi ?

    Répondre à ce message

    • SPIP, PHP et Javascript sont dans un bateau 17 mars 2007 12:16, par Ben33

      Salut jojo, en fait tu dois regarder le numero de ton article dans lequel tu veut inserrer du javascript : ex : ton article à pour numero : 8 ; donc tu va dans le dossier squelette, tu ouvre le fichier : article.html, tu le renomme : article8.html, puis tu inserre ton javascript la où tu veut et tu le met sur le serveur !

      PS : si tu à un problème encore vient sur mon site car je ne passe pas souvent ici !

      Voir en ligne : B3N

      Répondre à ce message

    Retour au début des forums

  • SPIP, PHP et Javascript sont dans un bateau

    17 janvier 2007 21:40, par Jean Luc Girard

    Voir aussi sur la réponse de Arno* sur le forum  :

    Je cite :
    —  Le PHP est interprété après les boucles

    C’est une erreur très classique (je le commets moi-même régulièrement).

    Lors de la construction d’une page de ton site, cela fonctionne en gros ainsi :

    - étape 1 : SPIP récupère le fichier de ton squelette, et va interpréter le langage de boucles : en fonction du paramètre passé en variable (id_article, id_rubrique...), les boucles sont transformées en requêtes vers la base de données, et les balises (#TITRE, #TEXTE...) sont remplacées par les éléments tirés de la base de données ;

    Dans cette première étape, tout ce que qui n’est pas du ressort des boucles et des balises SPIP est laissé tel quel ; de cette façon, tu peux mettre absolument ce que tu veux dans ton squelette (PHP, XML...).

    Le résultat est un fichier « texte » qui est le résultat de l’interprétation de ton squelette d’origine en y insérant les résultats tirés de la base de données. Ce fichier est sauvegardé (en cache).

    - étape 2 : ce fichier est appelé sur le serveur et envoyé vers ton butineur. Ainsi, s’il y a du PHP dans ce fichier, alors il est interprété par Apache et le résultat t’es communiqué.

    Tu vois donc que le PHP est interprété par Apache après que SPIP ait interprété les boucles et les balises SPIP. Du coup, il n’est pas possible d’utiliser du PHP à l’intérieur des définitions de boucles.

    Répondre à ce message

    Retour au début des forums

  • php dans un article ?

    10 juin 2003 14:20, par Thomas

    j’ai un problème avec php dans un article.

    j’encadre bien mon code par pour pas que spip fasse des manip sur mon code mais il en fait !

    le "<" est codé en "&lit;"

    comment faire donc pour exécuter convenablement du code php séparé par " <?" et "?> " ?

    nb : le problème n’existe pas pour ">" qui reste bien ">"

    merci

    Voir en ligne : munci

    Répondre à ce message

    • > php dans un article ? 10 juin 2003 14:22

      là aussi ya problème dans les forum :-(

      je disais j’encadre mon code php dans l’article par < H T M L > et < / H T M L > mais le "<" se trouve changé

      Répondre à ce message

    • > php dans un article ? 29 mars 2005 12:58, par Georges Cubas

      spip est fait pour publier un journal à l’origine et je ne crois pas qu’il soit prévu d’insérer du php ou du javascript dans les articles pour qu’il soit interprété. Il y a les squelettes pour ca.

      Dans un article il n’y a que du texte à afficher, les balises < HTML > indiquant à spip de ne pas faire de mise en forme.

      Donc pour ton problème il faut créer un squelette spécifique à l’article. Si tu dois inserer du php différent dans chaque article spip n’est peut être pas le bon systeme pour ton site.

      — 
      SourisVerte.net

      Répondre à ce message

      • > php dans un article ? 11 octobre 2005 19:43, par PhilippeD

        on est bien d’accord sur le principe de base... mais .. on a parfois besoin d’un petit coup de PHP !

        Pour moi le pb est deglisser des adresses mail transformées en image à l’exécution. Exemple :

        Répondre à ce message

        • > php dans un article ? 3 décembre 2005 00:01, par Shagshag

          SAlut désolé pour le retard de la réponse. Donc si c’est toujours valable tu peux faire un filtre qui récupère les adresses email dans tes articles et les remplace par une fonction php qui crée ton image

          par exemple :

          function apres_propre($texte) {
                  // remplace les mailto par des images
                  return ereg_replace("/<a href=\"mailto://(.*)\">(.*)<\/a>/i", "<?php email2img('\\1', '\\2'); ?".">", $texte);
          }

          je ne l’ai pas testé, c’est juste pour l’idée. Il y a plus d’informations sur la fonction ’apres_propre’ dans d’autres articles.

          A+

          souriverte.net

          Répondre à ce message

    • php dans un article ? 5 novembre 2005 11:54, par Guy

      Je me pose la même type de question...

      Effectivement, aujourd’hui, il ne semble pas y avoir de solution pour mettre un peu de PHP dans les articles.

      Et pourtant, il y a des cas où cela se justifie :

      Personnellement, je cherche à mettre en ligne des synthèses de chants pour aider des choristes à répéter.

      - Première approche : je fais un bon HTML bien bourrin, avec usage intensif de copier-coller (les morceaux sont interprétés via un plug-in), et j’insère le tout dans un article SPIP.

      - Deuxième approche : je fais un PHP une bonne fois pour toute, et il me suffit d’uploader le fichier de musique et de renseigner une table dans MySQL.

      De mon point de vue, cela reste de la publication d’informations.

      Je peux y arriver, bien sûr, en faisant un article et un squelette spécifiques. Mais je trouve ça "sale".

      J’ai tout faux ?

      Répondre à ce message

    Retour au début des forums

  • > SPIP, PHP et Javascript sont dans un bateau

    8 juillet 2005 14:25, par Céline

    Bonjour,

    Voila j’ai un petit problème avec un menu. En fait il est en javascript, dans une page en .js. Est-ce qu’il est possible de faire des boucles directement dans mon ficher js ?

    Merci !

    Celine

    Répondre à ce message

    • > SPIP, PHP et Javascript sont dans un bateau 25 septembre 2005 13:58, par mortimer

      tu peux faire des boucles dans tous types de fichier, même les javascripts, il faut juste le traiter comme des squelettes.

      C’est un peu bizarre, mais il faut écrire un squelette : monjavascript.php3/monjavascript.html et mettre le contenu du javascript (Avec boucle) dans le .html, il ne faut pas se fier à l’extension.

      Ensuite, on peut insérer le javascript en appelant le .php : <sript src="monjavascript.php3">

      Répondre à ce message

    Retour au début des forums

  • > SPIP, PHP et Javascript sont dans un bateau

    21 juin 2005 20:01, par marco357

    Bonjour et merci aux créateurs de ce site dans lequel j’ai bcp appris sur SPIP.

    Je cherche à mettre un accès privé sur mon site et je me sers des sessions PHP. J’ai une page login1.php qui inerroge une table et qui ouvre une session :

    if ($num == 1) //$num1 compte le nb d’enregistrement avec nom+pass corrects

    header("Location : page2.php3") ;

    @session_start() ;

    $_SESSION[’auth’] = "yes" ;

    exit ;

    Ensuite chaque page controle la présence de cette variable :

    <?php 

    @session_start(); 

    if (@
    $_SESSION['auth'] != "yes"

    {
    header("location: login1.php"); 

    exit;} 

    ?>

    (PS : le code de mes pages ne compoerte pas tous ces sauts de ligne que j’ajoite ici pour la lisibilité du message)

    Cette procédure marche parfaitement EN LOCAL : lorsque je demande page2.php3 en tapant son URL, sans passer par le formulaire de login1.php, je suis renvoyé vers login1.php.

    Cette procédure marche aussi chez mon hébergeur sur un dossier de test.

    Mais quand je la teste sur mes pages SPIP, il y a invariablement le même message d’erreur "headers already sent".

    Ces pages sont actuellement protégées par .htaccess/.htpasswd. ESt-ce que ça vient de là ou de la présence des boucles SPIP (sui ne posent pas pb en local) ?

    Merci.

    Répondre à ce message

    Retour au début des forums

  • et comment passer une variable spip à php ?

    boucle(articles)critere
    <?php
    _ $var
    =#TITRE;
    ?>

    /boucle

    n’a pas l’air de fonctionner.

    Répondre à ce message

    Retour au début des forums

  • Salut !

    Je voudrais créer une liste de titre de brève à sélectionner dans un formulaire, puis afficher le texte de la brève en dessous à chaque sélection. Voilà mon code :

    le javascript :
    [script]
    function afficherFondateur(monchoix)

    var leTexte = "divfond" ;
    [BOUCLE_trouverbreve (BREVES) id_breve=monchoix]

    document.getElementById(leTexte).innerHTML = #TEXTE ;

    [/BOUCLE_trouverbreve]

    [/script]

    le formulaire :
    [FORM NAME="myForm" ACTION="" METHOD="get"]
    [SELECT NAME="mySel" CLASS="input" onchange="afficherBreve(fmyForm.mySel.options[this.selectedIndex].value)"]

    [BOUCLE_liste (BREVES) par id_breve]
    [OPTION VALUE="#ID_BREVE"]#TITRE[/OPTION]
    [BOUCLE_liste]
    [/SELECT]
    [INPUT TYPE="button" NAME="valider" VALUE="Aller" CLASS="bouton"]
    [/FORM]

    le div où j’affiche le texte de la brève :
    [div id="divfond" style="position:relative ; width:100% ; height:300px ; z-index:1 ; overflow : auto"]
    [/div]

    JE N’ARRIVE PAS A RECUPERER LE TEXTE ! Quelqu’un a-t-il une solution ?

    Répondre à ce message

    Retour au début des forums

  • > SPIP, PHP et Javascript sont dans un bateau

    25 novembre 2003 16:17, par Guillaume

    ok merci tout est plus clair

    Répondre à ce message

    • pas tout a fait...c’est peut etre debile ce que je vais dire mais bon...si l’on cree son propre filtre, c’est du PHP ?! Alors ma question est de savoir si un filtre personnalisé est considere comme du code SPIP ou PHP... je voterais pour SPIP mais je souhaiterais etre sur... Du coup on a du code PHP qui s’execute à deux moments differents....

      Répondre à ce message

      • > SPIP, PHP et Javascript sont dans un bateau 11 février 2004 18:31, par bill

        Meme question pour moi avec un debut de reponse : quid de mes_fonctions.php ?

        J’y ai mis une petite fonction qui affiche directement du html et la, oh surprise, la page s’affiche bien au premier appel, mais au second : erreur, la fonction n’est pas trouvée !

        J’en conclue donc que mes_fonctions = SPIP => interprété qu’une seule fois.

        Mais alors, on doit la mettre ou la fonction qui fait un echo ?

        D’après ce que je comprends, il faut faire un fichier php a part et utiliser le include de PHP, pas le INCLURE de SPIP.

        J’ai bon ?

        Répondre à ce message

    Retour au début des forums

  • > SPIP, PHP et Javascript sont dans un bateau

    9 septembre 2003 15:13, par arnaud

    Vous trouverez ci-dessous un script permettant de faire défiler du texte (pour moi ce seront les 5 dernières news).

    Comment définir grâce aux balises #TITRE et #TEXTE, relatives aux brèves, la variable next_message[?] du script qui suit.

    Merci de votre aide.

    Arnaud


    Script :

    <script LANGUAGE="JavaScript">
    <!--
    var message = "Bienvenue"
    var character = 0;
    var to_print = "";
    var ypos = 96;
    var next = 0 ;
    var fade = 100 ;
    var next_message = new Array() ;


    next_message[1]= "brève1"<br>
    next_message[2]= "brève2"<br> next_message[3]= "brève3"<br>
    next_message[4]= "brève4"<br>
    next_message[5]= "brève5"




    function doText(text) {
    if (document.all) {
    if (character <= text.length - 1) {
    to_print += text.charAt(character);
    teletext.innerHTML = to_print;
    character++;
    }
    else
    scrollIt();
    }
    setTimeout("doText(message)", 20);
    }

    function scrollIt() {
    if (ypos >= 0) {
    ypos -= 1;
    fade -= 3;
    if (ypos < 5) {
    teletext.innerHTML = "" ;
    }
    }
    else {
    ypos = 96;
    character = 0;
    to_print = "";
    nextMessage();
    fade = 100;
    }
    teletext.style.top = ypos;
    teletext.filters.alpha.opacity = fade;
    }

    function nextMessage() {
    message = next_message[next]
    if (next == 2) {
    next = 0;
    }
    else
    next++;
    }

    // -->

    </script>

    Répondre à ce message

    • > SPIP, PHP et Javascript sont dans un bateau 9 septembre 2003 19:03, par Jean Luc Girard

      Voici quelques indications qui je l’espère t’aideront à barrer entre les récifs :

      - Met le contenu de chaque brève à la suite dans le TEXTE, chacune entre guillemet, séparées par des virgules.
      ex : "lundi", "mardi", "mercredi"

      - Affecte le tableau next_message, au bon endroit dans le script :

      < !-- var message = "Bienvenue" var character = 0 ; var to_print = "" ; var ypos = 96 ; var next = 0 ; var fade = 100 ;

      var next_message = new Array(#TEXTE) ;

      ...

      Mais est-ce que ce script marche vraiment ? c’est pas sur pas sur à vue de nez ...

      Ensuite, il faut penser à la mise à jour de tes brèves défilantes. Si les brèves sont indépendantes les unes des autres et doivent être mises à jour, ne vaudrait il pas mieux des "objets spip" indépendants plutôt que de bidouiller une compilation dans une seule breve ? c’est à dire faire une brève par annonce, et mettre ce script par exemple dans la rubrique "brève défilantes" englobante, avec :

      <BOUCLE_defil(ARTICLES){id_rubrique}> next_message[]= "#TEXTE"
      </BOUCLE_defil>

      Ceci dit et de toute façon, je te souhaite bonne chance ... et donne nous des nouvelles de ta ballade en bateau, avec spip et javascript.

      Répondre à ce message

    Retour au début des forums

  • manipuler php dans javasript

    28 avril 2003 13:48, par dymencharles

    salut, mon probleme est que je n’arrive pas a manipuler du php dans le script

    <script langage="javascript"> </script>

    Répondre à ce message

    • > manipuler php dans javasript 2 juillet 2003 17:36

      Dans l’ordre on a : PHP (interprété par le serveur) puis javascript (dont les instructions sont exécutées par le navigateur web de l’internaute). Quand on affiche le code source d’une page html, on voit bien que seul le code javascript est visible, php est déjà interprété. Si tu veux pouvoir manipuler php dans javascript, il faut que tu mettes tes instructions javascript dans des print. ex :
      <?php <br>
      print
      "<script language=\"JavaScript\"> \n";<br>
      print
      "alert("hello");";<br>
      $m="bonjour";<br>
      print
      "<\script>";<br>
      ?>

      lis cet article, il te permettra de mieux comprendre

      Voir en ligne : Quelles différences entre php et javascript ?

      Répondre à ce message

    Retour au début des forums

0 | 25



Suivre la vie du site RSS 2.0 | Plan du site | Espace privé | Charte et vie SPIP-Contrib | SPIP | L'autre.net