web-dev-qa-db-fra.com

Est-il possible de retourner HTML dans un fichier PHP une fonction? (sans construire la valeur de retour sous forme de chaîne)

J'ai une fonction PHP que j'utilise pour générer un bloc HTML standard. Cela ressemble actuellement à ceci: 

<?php function TestBlockHTML ($replStr) { ?>
    <html>
    <body><h1> <?php echo ($replStr) ?> </h1>
    </html>
<?php } ?>

Je veux renvoyer (plutôt qu'écho) le code HTML à l'intérieur de la fonction. Y a-t-il un moyen de faire cela sans construire le HTML (ci-dessus) dans une chaîne?

56
seanyboy

Vous pouvez utiliser un heredoc , qui supporte une interpolation variable, ce qui lui donne un aspect plutôt net:

function TestBlockHTML ($replStr) {
return <<<HTML
    <html>
    <body><h1>{$replStr}</h1>
    </body>
    </html>
HTML;
}

Faites toutefois très attention à l'avertissement du manuel - la ligne de fermeture ne doit pas contenir d'espaces, elle ne peut donc pas être indentée.

75
Paul Dixon

Oui, il y a: vous pouvez capturer le texte echoed en utilisant ob_start :

<?php function TestBlockHTML ($replStr) { ob_start(); ?>
    <html>
    <body><h1> <?php echo ($replStr) ?> </h1>
    </html>
<?php
    return ob_get_clean();
} ?>
61
Konrad Rudolph

Il s’agit peut-être d’une solution peu précise, et j’aimerais bien que quiconque précise s’il s’agit d’une mauvaise idée, car ce n’est pas une utilisation standard des fonctions. J'ai réussi à obtenir du HTML à partir d'une fonction PHP sans générer la valeur de retour sous forme de chaîne avec les éléments suivants:

function noStrings() {
    echo ''?>
        <div>[Whatever HTML you want]</div>
    <?php;
}

Le juste 'appeler' la fonction:

noStrings();

Et cela produira:

<div>[Whatever HTML you want]</div>

En utilisant cette méthode, vous pouvez également définir des variables PHP dans la fonction et les renvoyer dans le code HTML.

16
Lorien Brune

Une autre façon de faire est d'utiliser file_get_contents () et d'avoir une page HTML

PAGE DE MODÈLE

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head><title>$title</title></head>
<body>$content</body>
</html>

Fonction PHP

function YOURFUNCTIONNAME($url){

$html_string = file_get_contents($url);
return $html_string;

}
5
Cayde 6

Créez un fichier de modèle et utilisez un moteur de modèle pour lire/mettre à jour le fichier. Cela augmentera la maintenabilité de votre code à l'avenir, ainsi que l'affichage séparé de la logique.

Un exemple utilisant Smarty :

Fichier de modèle

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head><title>{$title}</title></head>
<body>{$string}</body>
</html>

Code

function TestBlockHTML(){
  $smarty = new Smarty();
  $smarty->assign('title', 'My Title');
  $smarty->assign('string', $replStr);
  return $smarty->render('template.tpl');
}
5
Rob

Ou vous pouvez simplement utiliser ceci:

<?
function TestHtml() { 
# PUT HERE YOU PHP CODE
?>
<!-- HTML HERE -->

<? } ?>

pour obtenir le contenu de cette fonction, utilisez ceci: 

<?= file_get_contents(TestHtml()); ?>

C'est tout :) 

0
Wahid Lahouiter

Si vous ne voulez pas avoir recours à un outil tiers, vous pouvez utiliser cette technique:

function TestBlockHTML($replStr){
  $template = 
   '<html>
     <body>
       <h1>$str</h1>
     </body>
   </html>';
 return strtr($template, array( '$str' => $replStr));
}
0
marrion luaka