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?
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.
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 echo
ed za pomocą ob_start
:
<?php function TestBlockHTML ($replStr) { ob_start(); ?>
<html>
<body><h1> <?php echo ($replStr) ?> </h1>
</html>
<?php
return ob_get_clean();
} ?>
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.
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');
}
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;
}
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:)
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));
}
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