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?
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.
Oui, il y a: vous pouvez capturer le texte echo
ed en utilisant ob_start
:
<?php function TestBlockHTML ($replStr) { ob_start(); ?>
<html>
<body><h1> <?php echo ($replStr) ?> </h1>
</html>
<?php
return ob_get_clean();
} ?>
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.
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;
}
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');
}
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 :)
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));
}