Page 1 sur 1

insertion php dans here-document

Posté : 13 mai 2008, 22:31
par titi22
Bonjour,
je souhaiterai savoir comment insérer du php entre les balises <<<EOD et EOD; il doit y avoir une syntaxe particulière car avec <?PHP code ?> ça ne marche pas.
Voici le code simplifié ou je souhaiterai insérer notamment le fonction test:

Code : Tout sélectionner

<?php $skin['contenu'] .= <<<EOD <div> <?php test(); ?> </div> EOD; include("template.php"); ?>
Merci de votre aide

Posté : 13 mai 2008, 22:48
par rami
Sauf erreur de ma part, je ne crois pas qu'il soit possible d'utiliser des fonctions avec la syntaxe HERDOC. Tu pourrais faire comme ça:
<?php
$test = test();
$skin['contenu'] .= <<<EOD
<div>
$test
</div>
EOD;
 
include("template.php");

?>

Posté : 13 mai 2008, 23:07
par titi22
non ça ne marche pas :cry:
l'image que renvoi la fonction test s'affiche en dehors du herdoc ( par $test = test(); je pense )
et pas dans celui-ci comme voulu.

Posté : 13 mai 2008, 23:13
par rami
J'imagine donc que la fonction test() fait des echo (ou print) directement. Tu as du coup 3 possibilités :
- tu modifies test() pour qu'elle renvoie une chaîne (le code précédent fonctionnera du coup)
- tu n'utilises pas la syntaxe HEREDOC
- tu utilises les fonctions de bufferisation de sortie : ob_start() /ob_get_contents / ob_end_clean() (mais c'est pas très beau)

Posté : 13 mai 2008, 23:16
par Cyrano
dans du HEREDOC, tu peux mettre des variables, idéalement entre accolades, mais uniquement des variables : pas de constantes ni de fonctions.
<?php
$tableau = array("du texte dans un tableau");
$var1 = "variable";
$var2 = <<<CODE_HTML
<p>Du code html avec une {$var1} ou encore {$tableau[0]}</p>

CODE_HTML;
echo($var2);
?>

Posté : 14 mai 2008, 15:35
par titi22
bonjour,
tu modifies test() pour qu'elle renvoie une chaîne (le code précédent fonctionnera du coup)
je met la fonction test ci dessous, je ne suis pas capable de l'adapté tout seul Merci.

Code : Tout sélectionner

function test($cfg=0,$reload=1) { // Affiche le cryptogramme echo "<table><tr><td><img id='cryptogram' src='".$_SESSION['cryptdir']."/cryptographp.php?cfg=".$cfg."&".SID."'></td>"; if ($reload) echo "<td><a title='".($reload==1?'':$reload)."' style=\"cursor:pointer\" onclick=\"javascript:document.images.cryptogram.src='".$_SESSION['cryptdir']."/cryptographp.php?cfg=".$cfg."&".SID."&'+Math.round(Math.random(0)*1000)+1\"><img src=\"".$_SESSION['cryptdir']."/images/reload.png\"></a></td>"; echo "</tr></table>"; }
il s'agit en fait de l'image d'un captcha.
le scripte vient du site captcha.fr

Posté : 14 mai 2008, 22:09
par rami
Définis une variable en lui affectant la première chaîne que tu affiches via echo.
Puis utilises la concaténation sur cette même variable avec le sautres chaînes, puis retourne cette variable.

Regarde http://phpdebutant.org/article55.php pour plus d'informations.

Posté : 15 mai 2008, 22:12
par titi22
bonjour,

j'ai donc réecrit cela :
 function dsp_crypt($cfg=0,$reload=1) {
 // Affiche le cryptogramme
$test01 = "<table><tr><td><img id='cryptogram' src='".$_SESSION['cryptdir']."/cryptographp.php?cfg=".$cfg."&".SID."'></td>";
$test02 = "$test01"."if ($reload)"."<td><a title='".($reload==1?'':$reload)."' style=\"cursor:pointer\" onclick=\"javascript:document.images.cryptogram.src='".$_SESSION['cryptdir']."/cryptographp.php?cfg=".$cfg."&".SID."&'+Math.round(Math.random(0)*1000)+1\"><img src=\"".$_SESSION['cryptdir']."/images/reload.png\"></a></td>"."</tr></table>";

return $test02;
 }
c'est netement mieux puisque l'image apparais bien maintenant mais j'ai encore un problème avec la forme concaténée de "if ($reload)" puisqu'il apparait sur la page sous forme " if (1)".

Merci

Posté : 15 mai 2008, 22:28
par Cyrano
En (apparemment) plus long mais plus propre et avec la syntace HEREDOC, ça aurait donné ceci :
function dsp_crypt($cfg=0,$reload=1) 
{
    // Affiche le cryptogramme
    $sid = SID;
    $str = <<<CHAINE
  <table>
    <tr>
      <td>
        <img id="cryptogram" src="{$_SESSION['cryptdir']}/cryptographp.php?cfg={$cfg}&{$sid}'>
      </td>

CHAINE;
    if ($reload)
    {
        $title = ($reload != 1) ? $reload : null;
        $str .= <<<CHAINE
      <td>
        <a title="{$title}" style="cursor:pointer" onclick="document.images.cryptogram.src='{$_SESSION['cryptdir']}/cryptographp.php?cfg={$cfg}&{$sid}&'+ Math.round(Math.random(0)*1000)+1"><img src="{$_SESSION['cryptdir']}/images/reload.png"></a>
      </td>

CHAINE;
    }
        $str .= <<<CHAINE
    </tr>
  </table>

CHAINE;

    return $str;
}
Pour info, j'ai réalisé une proportion plus que notable de la nouvelle version du site www.auchandirect.fr : je n'ai utilisé pratiquement que ce système avec HEREDOC. C'est très facile de travailler avec ça si on est un peu discipliné coté HTML/JavaScript/CSS ainsi que coté PHP bien entendu.

Posté : 16 mai 2008, 23:33
par titi22
Merci Cyrano ça marche nickel :D