SPIP - Contrib

SPIP - Contrib

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

41 visiteurs en ce moment

fontsizeup fontsizedown
Accueil du site > Contribs > Outils pour squelettes > Tutoriaux pour squelettes > SPIP, PHP et Javascript sont dans un bateau
[32 commentaires]

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

2 votes

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 !

Retour en haut de la page

32 Messages de forum

Voir toute la discussion

Pages 1 | 2 | 3 | 4

  • Répondre à ce message

    6 juin 17:34 , par Jean Luc Girard

    Salut, pour faire marcher ton cas 1) tu auras avantage à décomposer en faisant un #SET préallable pour la partie [ () ] la plus profonde de ton expression. JLuc

  • Répondre à ce message

    11 octobre 2007 18:29 , par denisb

    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"></scri pt>
    <noscript><a href="http://www.pcastuces.com" title="PC Astuces">PC Astuces</a></noscript>

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

  • Répondre à ce message

    21 mars 2007 09:08 , par Titoon

    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

    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

    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

    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

    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

    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

    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

    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 :

Pages 1 | 2 | 3 | 4

Répondre à cet article

Retour en haut de la page

Ça discute par ici