Czy jest jakiś sposób na zwrócenie HTML w funkcji PHP? (bez budowania wartości zwracanej jako łańcuch znaków)

Mam funkcję PHP, której używam do wypisywania standardowego bloku HTML. Obecnie wygląda to tak:

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

Chcę zwrócić (zamiast echo) kod HTML wewnątrz funkcji. Czy jest jakiś sposób, aby to zrobić bez budowania HTML (powyżej)w łańcuchu?

Author: j08691, 2009-02-09

7 answers

Możesz użyć heredoc , który obsługuje interpolację zmiennych, dzięki czemu wygląda dość schludnie:

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

Zwróć jednak szczególną uwagę na ostrzeżenie w instrukcji-linia zamykająca nie może zawierać białych znaków, więc nie może być wcięta.

 73
Author: Paul Dixon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-15 20:17:41

Tak, jest: możesz przechwycić tekst echoed za pomocą ob_start:

<?php function TestBlockHTML ($replStr) { ob_start(); ?>
    <html>
    <body><h1> <?php echo ($replStr) ?> </h1>
    </html>
<?php
    return ob_get_clean();
} ?>
 59
Author: Konrad Rudolph,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-09 14:55:23

To może być szkicowe rozwiązanie, i byłbym wdzięczny, gdyby ktoś wskazał, czy to zły pomysł, ponieważ nie jest to standardowe użycie funkcji. Udało mi się uzyskać HTML z funkcji PHP bez budowania wartości zwracanej jako ciąg znaków z następującym:

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

Po prostu 'wywołaj' funkcję:

noStrings();

I wyświetli:

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

Za pomocą tej metody można również zdefiniować zmienne PHP wewnątrz funkcji i echo je wewnątrz HTML.

 14
Author: Lorien Brune,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-13 00:23:13

Utwórz plik szablonu i użyj silnika szablonu do odczytu/aktualizacji pliku. Zwiększy to w przyszłości możliwość utrzymania kodu, a także oddzieli wyświetlanie od logiki.

Przykład użycia Smarty :

Plik Szablonu

<!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>

Kod

function TestBlockHTML(){
  $smarty = new Smarty();
  $smarty->assign('title', 'My Title');
  $smarty->assign('string', $replStr);
  return $smarty->render('template.tpl');
}
 5
Author: Rob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-09 15:32:21

Innym sposobem jest użycie file_get_contents () i posiadanie strony HTML szablonu

STRONA SZABLONU

<!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>

Funkcja PHP

function YOURFUNCTIONNAME($url){

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

}
 3
Author: Cayde 6,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-28 18:38:59

Lub możesz po prostu użyć tego:

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

<? } ?>

Aby pobrać zawartość z tej funkcji, Użyj tego:

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

To jest to:)

 0
Author: Wahid Lahouiter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-11 18:35:01

Jeśli nie chcesz polegać na narzędziu innej firmy, możesz użyć tej techniki:

function TestBlockHTML($replStr){
  $template = 
   '<html>
     <body>
       <h1>$str</h1>
     </body>
   </html>';
 return strtr($template, array( '$str' => $replStr));
}
 0
Author: marrion luaka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-16 22:23:54