insertion php dans here-document

Petit nouveau ! | 9 Messages

13 mai 2008, 22:31

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

Mammouth du PHP | 983 Messages

13 mai 2008, 22:48

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");

?>

Petit nouveau ! | 9 Messages

13 mai 2008, 23:07

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.

Mammouth du PHP | 983 Messages

13 mai 2008, 23:13

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)

Mammouth du PHP | 19672 Messages

13 mai 2008, 23:16

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);
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 9 Messages

14 mai 2008, 15:35

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

Mammouth du PHP | 983 Messages

14 mai 2008, 22:09

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.

Petit nouveau ! | 9 Messages

15 mai 2008, 22:12

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

Mammouth du PHP | 19672 Messages

15 mai 2008, 22:28

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 9 Messages

16 mai 2008, 23:33

Merci Cyrano ça marche nickel :D