У меня есть простая функция PHP, которая выводит HTML.
<?php function get_header() { ?> <div id="header"> <div class="page-width"> <!-- And a lot more HTML after this line. --> <?php } ?>
Поэтому, когда я вызываю get_header()
, функция выводит HTML.
Каков самый простой способ настроить эту функцию, чтобы вернуть HTML в виде строки? Нужно ли создавать обертку вокруг этой функции? Другими словами, я хотел бы иметь возможность сделать, например, var html_string = get_header_wrapper()
, где html_string
содержит весь HTML- html_string
выше.
Одна вещь, о которой я мог подумать, – дублировать функцию и заставить ее возвращать строку. Однако это было бы так неэффективно, потому что оно вводит много дубликатов кода.
<?php function get_header_wrapper() { var ret = <<<EOD <div id="header"> <div class="page-width"> <!-- And a lot more HTML after this line. --> ... EOD; return ret; } ?>
Вы можете использовать выходные буферизационные документы для получения вывода этой функции:
ob_start(); get_header(); $html = ob_get_clean();
Если вам это нужно более одного раза, вы можете превратить его в свою собственную функцию:
/** * call a function and return it's output as string. * * @param callback $function * @param array $arguments (optional) * @param var $return (optional) the return value of the callback * @return string function output */ function ob_get_call($function, array $arguments = array(), &$return = NULL) { ob_start(); $return = call_user_func_array($function, $arguments); $buffer = ob_get_clean(); return $buffer; }
Применение:
$html = ob_get_call('get_header');
Поскольку ответ является популярным сегодня, вот еще одна функция, чтобы получить вывод include:
/** * include a file and return it's output as string. * * @param string $file * @param array $variables (optional) keys as variable names and values as variable values * @param var $includeReturn (optional) the return value of the include * @return string function output */ function ob_get_include($file, array $variables = array(), &$includeReturn = NULL) { $includeFilename = $file; unset($file); extract($variables); unset($variables); ob_start(); $includeReturn = include($includeFilename); return ob_get_clean(); }
с/** * include a file and return it's output as string. * * @param string $file * @param array $variables (optional) keys as variable names and values as variable values * @param var $includeReturn (optional) the return value of the include * @return string function output */ function ob_get_include($file, array $variables = array(), &$includeReturn = NULL) { $includeFilename = $file; unset($file); extract($variables); unset($variables); ob_start(); $includeReturn = include($includeFilename); return ob_get_clean(); }
эта/** * include a file and return it's output as string. * * @param string $file * @param array $variables (optional) keys as variable names and values as variable values * @param var $includeReturn (optional) the return value of the include * @return string function output */ function ob_get_include($file, array $variables = array(), &$includeReturn = NULL) { $includeFilename = $file; unset($file); extract($variables); unset($variables); ob_start(); $includeReturn = include($includeFilename); return ob_get_clean(); }
не/** * include a file and return it's output as string. * * @param string $file * @param array $variables (optional) keys as variable names and values as variable values * @param var $includeReturn (optional) the return value of the include * @return string function output */ function ob_get_include($file, array $variables = array(), &$includeReturn = NULL) { $includeFilename = $file; unset($file); extract($variables); unset($variables); ob_start(); $includeReturn = include($includeFilename); return ob_get_clean(); }
Применение:
include.php
:
<div class="greeting"> Hello <em><?php echo htmlspecialchars($name); ?></em>! </div>
С помощью:
$variables = array( 'name' => 'Marianne', ); $html = ob_get_include('include.php', $vars);
Связанный:
Использовать буферизацию вывода:
<?php function get_header() { ob_start(); <div id="header"> <div class="page-width"> <!-- And a lot more HTML after this line. --> ... $content = ob_get_contents(); ob_end_clean(); return $content; } ?>
Вы можете даже выполнить некоторую обработку в строке перед ее возвратом. OB камни!
Лучшим действием для получения содержимого функции html-content является следующее, а затем оно должно быть у вас под рукой:
function html_content(){ ob_start();?> <div class="some-div" id='the_id'>html text goes here </div> <?php return ob_get_clean(); }
В этом методе вы можете легко скопировать нужные теги и содержимое html в свои коды и легко их использовать.
Я использовал ob_start (); перед началом html-тегов, и в конце я использовал return ob_get_clean ();