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

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

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

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.

    Répondre à ce 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

    Répondre à ce 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 !)

    Répondre à ce 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

    Répondre à ce 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.

    Répondre à ce 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.

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

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