Можно ли добавить вывод print () в переменную?
У меня есть следующая ситуация:
У меня есть php-файл, который выглядит примерно так:
title.php
<?php $content = '<h1>Page heading</h1>'; print($content);
У меня есть php-файл, который выглядит так:
page.php
<?php $content = '<div id="top"></div>'; $content.= $this->renderHtml('title.php'); print($content);
У меня есть функция renderHtml()
:
public function renderHtml($name) { $path = SITE_PATH . '/application/views/' . $name; if (file_exists($path) == false) { throw new Exception('View not found in '. $path); return false; } require($path); }
Когда я выгружаю переменную содержимого в page.php, она не содержит содержимого title.php. Содержимое title.php просто печатается, когда оно вызывается вместо добавления в переменную.
Надеюсь, это ясно, что я пытаюсь сделать. Если нет, простите, пожалуйста, скажите мне, что вам нужно знать. 🙂
Спасибо за вашу помощь!
PS
Я обнаружил, что у меня уже был такой вопрос, как мой. Но это касалось Zend FW.
Как захватить вывод представления Zend вместо фактического вывода его
Однако я думаю, что это именно то, что я хочу сделать.
Как настроить функцию так, чтобы она вела себя так?
РЕДАКТИРОВАТЬ
Просто хотел поделиться окончательным решением:
public function renderHtml($name) { $path = SITE_PATH . '/application/views/' . $name; if (file_exists($path) == false) { throw new Exception('View not found in '. $path); return false; } ob_start(); require($path); $output = ob_get_clean(); return $output; }
Вы можете записывать выходные данные с помощью функций ob_get_clean()
и ob_get_clean()
:
ob_start(); print("abc"); $output = ob_get_clean(); // $output contains everything outputed between ob_start() and ob_get_clean()
Кроме того, обратите внимание, что вы также можете возвращать значения из включенного файла, например, из функций:
a.php:
return "<html>";
b.php:
$html = include "a.php"; // $html will contain "<html>"
Вы можете использовать буферизацию вывода для захвата любого выходного сообщения ob_start () http://us3.php.net/ob_start . Вы записываете вывод с помощью ob_get_flush () http://us3.php.net/manual/en/function.ob-get-flush.php .
Или вы можете просто вернуть результат из title.php следующим образом:
<?php $content = '<h1>Page heading</h1>'; return $content;