Comment récupérer une « variable spip » en une variable PHP ?

All contributions published for previous SPIP versions

Il suffit simplement de faire :

<?php $soustitre = '[(#SOUSTITRE|texte_script)]'; ?>

Attention : C’est la seule technique opérationnelle, pas de ", d’addslashes ou autres joyeusetés sous peine de plantage voire de faille dans la sécurité.

updated on 27 April 2003

Discussion

6 discussions

  • Même avec le heredeoc ZORG la je n’arrive pas a récupérer mon LOGO_DOCUMENT.

    Pourtant je n’ai aucun souci à récuperer le titre ou autre chose concernant ce doc :/

    Je suis en train de faire ce site:
    http://www.gallarddidierarchitecte.fr/spip.php?page=accueil&lang=fr

    Je fais apparaitre mes articles dans des conteneurs avec du javascript sur un onclick sur le div class=block. J’ai reussis sans probleme a appeler le texte et le titre de l’article avec ce code :

    <div class="block" onclick="getarticle('[(#TITRE|texte_script)]','[(#TEXTE|inserer_attribut{'class',article}|texte_script)]',this,'LES PHOTOS')">

    Et la function javascript associé :

    <script type="text/javascript">
    
            //ARTICLES:
            function getarticle(titre,texte,elementthis,photo){
           
                    contit = document.getElementById("box_titre");
                    contit.innerHTML = "";
                    contit.innerHTML += titre;
                   
                    contart = document.getElementById("box_article");
                    contart.innerHTML = "";
                    contart.innerHTML += texte;       
                           
                    contpho = document.getElementById("box_photo");
                    contpho.innerHTML = "";
                    contpho.innerHTML += photo;
                   
                    //change la couleur du block article
                    elementthis.style.backgroundColor="#b8e79f";
                           
           
            }   
    </script>
    
      

    Mais mon souci c’est maintenant d’appeler les LOGO_DOCUMENT lié à l’article Si je remplace carrement dans la fonction getarticle, ce que j’ai appeler la pour l’exemple MES PHOTOS par une boucle spip cela ne fonctionne pas. j’avais penser alors mettre la boucle carrément dans le script et aller chercher les bon document avec une variable javascript definis par ID_ARTICLE, seulement vu que la boucle s’execute avant le javascript impossible.

    je me suis donc tourné vers une autre idée utiliser du PHP. Et j’ai insérer ce code dans ma BOUCLE article

             <?php $id = 'num'.'[(#ID_ARTICLE|texte_script)]'; ?>       
                                                       
             <BOUCLE_photo(DOCUMENTS){id_article}{extension==jpg|png|gif}>
                                               
                       <?php
                        $$id .= '[(#TITRE|texte_script)]';
                        ?>
                                                 
              </BOUCLE_photo>
    
              <div class="block" onclick="getarticle('[(#TITRE|texte_script)]','[(#TEXTE|inserer_attribut{'class',article}|texte_script)]',this,'<?php echo $num[(#ID_ARTICLE|texte_script)]; ?>')">

    Et la miracle sa marche pour tout #TITRE, #FICHIER etc..!!!..Mais ooh malheur sauf pour la balise #LOGO_DOCUMENT qui fait bugger le site

    Il y a deux document associé à l’ article (REA./EQUIP/2003 cheaume etc..) et on vois bien leur titre apparaitre en haut. Mais si je remplace titre par logo c’est foutu .. Je ne comprend aps ce qui bug..

    Peu être c’est impossible et je dois partir dans une autre direction ??
    Si quelqun a une idée.. Merci d’avance.

    Reply to this message

  • 1
    Christophe Sevin

    Bonjour,

    Je débute en spip. Je suis en stage pour 2 mois encore et j’ai besoin de votre aide.

    J’ai parcouru le net à la recherche d’une reponse à ma question mais en vain. Je suis tomber sur ce topic qui est exactement ce que je cherche mais aucune des réponse ne semble fonctionner. Voila ce que j’ai essayé pour récupérer ma variable de SPIP à PHP :

    <?php $titre #TITRE ; ?>
    <?php $titre '#TITRE' ?>
    <?php $titre = [(#TITRE|texte_script)] ; ?>
    <?php $titre '[(#TITRE|texte_script)] '?>
    <?php $titre = <<<ZORG
    [(#TITRE|texte_script)]
    ZORG;
    echo 
    $titre;
    ?>

    Toutes ces solution renvoie l’erreur «Parse error: parse error in c:\program files\easyphp1-8\www\spip2.0.8\ecrire\public.php(174) : eval()’d code».

    Je fonctionne sous SPIP2.0.8 peut être est-ce du à cela.
    Si quelqu’un à une piste de résolution je suis preneur.
    Je vous remercie par avance.
    Spip-contrib et tous les contributeurs en général font un bouleau extra ordinaire.
    Christophe Sevin

    • Christophe Sevin

      Bonjour tout le monde,

      Je tiens a m’excuser de mon précédent message car je me suis rendu compte que mes tests n’affectaient pas la bonne page. Ainsi, j’ai résolu mon problème (non sans mal ..) grâce à vos conseils. La seule syntaxe à utiliser et qui marche parfaitement est donc bien :

      <?php
       $mavariable 
      '[(#TITRE|texte_script)]';
      ?>

      Encore une fois merci à tous les contributeurs de ce site.
      Bonne journée.
      Christophe Sevin

    Reply to this message

  • 2

    Sauf erreur de ma part, cette contrib ne marche pas avec des Logos, qui sont des balises calculées ou interviennent des ’" et des “” imbriqués.

    Par exemple :
    [(#LOGO_ARTICLE_RUBRIQUE||text_script)]
    ne marche pas.

    Je suis en train de tenter de faire un filtre avec serialize et addslashes, mais sans succès pour l’instant.

    • C’est l’url que tu veux ?

      $url='[(#LOGO|fichier|texte_script)]'

    • La seule, l’unique façon de faire, pour s’affranchir de tous les problèmes de guillemets, c’est d’utiliser l’ésotérique syntaxe PHP HereDoc :

      au lieu de :

      <?php $toto = '[(#SOUSTITRE|texte_script)]'; ?>

      faire :

      <?php
      $toto= <<<ZORG
      [(#SOUSTITRE|texte_script)]
      ZORG;
      ?>

      Et là ça marche partout (le seul soucis est de faire attention avec les éditeurs Windows, car la dernière ligne ’ZORG;’ ne doit pas contenir de caractère \r en fin de ligne. Pour ça, migrez-donc en Linux, il est temps !)

    Reply to this message

  • 1
    Frédéric Poncet

    Peut-on créer un champ réservé aux scripts, dans la table articles (par exemple) et faire en sorte que ce champ soit éditable dans l’interface SPIP?

    (P.S. la création de ce champ avec phpMyAdmin ne suffit pas à le faire prendre en compte par l’interface SPIP)

    • Bonjour, je suis à la recherche de cette solution moi aussi.

      Dans le “compilateur” SPIP quelqu’un connait-il ou et sous quel nom le “select spip_aticle” est réalisé. Et donc ou et sous quelle forme se trouve les champs de la table article.

      Ma recherche est pour ajouter un champs prix et un champs quantité à un article qui serait pour mon application une revue ou un livre.
      Merci

    Reply to this message

  • 5

    et pour faire l’inverse ???

    variable PHP en SPIP
    ou au moiin utilisé dans une boucle spip

    • thomas

      puisque SPIP est d’abord exécuté :-(

    • En effet, on ne peut pas. Mais une solution de remplacement, qui peut faire l’affaire dans certains cas, est expliquée ici :
      http://snurl.com/1w51

      Nemo

    • Heu j’aurais bien aimé avoir la soluce proposée mais le lien ci-dessus est mort ! :(
      Serait-il possible de redonner la solution qui permet dans certains cas de récupérer dans une vaiable SPIP la valeur d’une variable PHP ?

    • Si l’on veut utiliser une variable PHP pour sélectionner une rubrique (par exemple), il y a une solution.

      Par exemple, ma variable PHP $mon_numero contient une valeur (résultant d’un calcul ou passée dans l’URL). Je veux sélectionner les articles dont l’id_rubrique est égal à $mon_numero.

      <BOUCLE_articles(ARTICLES){id_rubrique}>
      <?php
      if ($id_rubrique==$mon_numero) {
      ?>
      contenu de la boucle (code HTML avec balises SPIP)
      <?php
      }
      ?>
      </BOUCLE_articles>
    • Il y a un intéressant fil de discussion sur le sujet sur les forums du site de SPIP, avec deux propositions, une pour définir une balise qui provoque que ce code php soir exécuté au moment de calculer le squelette, et une deuxième pour passer des variables de l’URL et des valeurs de balises dans le contexte des squelettes spip.

      J’ai testé la deuxième, ça marche et c’est puissant.

    Reply to this message

  • Spidermotard

    Bonjour,

    Juste une petite précision qui évitera aux moutons comme moi de perdre une heure ou deux :o)

    Si vous récupérez une variable qui ne fonctionne pas avec les filtres, alors il ne faut pas rajouter le filtre. Hey oui, c’est con mais je suis tombé en plein dedans.

    <?php $id_secteur = ' [(#ID_SECTEUR)] '; ?>

    Merci pour le tuyau.

    Reply to this message

Comment on this article

Who are you?
  • [Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom