PHP включает в себя переменную - PullRequest
6 голосов
/ 10 декабря 2010

У меня есть функция, которая контролирует вывод моей страницы:

$page = "<div class='media-title'><h2>{$title}</h2></div><div class='media-image'>{$image}</div><div class='media-desc'>{$desc}</div>";

Я хотел бы включить файл "box.php" внутри этого HTML, который определен впеременная $page.Я попробовал это:

$page = "<div class='media-title'><h2>{$title}</h2></div><div class='media-image'>{$image}</div><div class="inlinebox">" . include("box.php"); . "</div><div class='media-desc'>{$desc}</div>";

... но это не сработало.Как я могу поместить php include внутри переменной?

Ответы [ 4 ]

13 голосов
/ 10 декабря 2010

из php.net

// put this somewhere in your main file, outside the
// current function that contains $page
function get_include_contents($filename) {
    if (is_file($filename)) {
        ob_start();
        include $filename;
        $contents = ob_get_contents();
        ob_end_clean();
        return $contents;
    }
    return false;
}

// put this inside your current function
$string = get_include_contents('box.php');
$page  = '<div class="media-title"><h2>{$title}</h2></div>';
$page .= '<div class="media-image">{$image}</div>';
$page .= '<div class="inlinebox">' . $string . '</div>';
$page .= '<div class="media-desc">{$desc}</div>';
9 голосов
/ 10 декабря 2010

Как я могу поместить php include внутри переменной?

# hello.php
<?php
  return "Hello, World!";
?>

# file.php
$var = include('hello.php');
echo $var;

Хотя я бы вообще избегал такой вещи.

3 голосов
/ 10 декабря 2010

Во-первых, не используйте точку с запятой внутри оператора.
Во-вторых, заключите оператор включения в скобки.

$page = "<div class='media-title'><h2>{$title}</h2></div>
<div class='media-image'>{$image}</div><div class="inlinebox">" . 
(include "box.php") . "</div><div class='media-desc'>{$desc}</div>";

Наконец: в файле "box.php" вы увидитенужно сделать следующее:

<?php
ob_start();

// your code goes here

return ob_get_clean();

РЕДАКТИРОВАТЬ: некоторая информация о вызове return вне контеста функции: PHP Manual - Return .

2 голосов
/ 10 декабря 2010

Edit:

Не знаю, полезно ли это, но я думаю, что включение файла для получения фрагмента HTML не является хорошим вариантом. Это не масштабируется. Вы можете попробовать что-то вроде MVC. Вы могли бы попросить вашего контроллера обновить содержимое того, что вы хотите.

$view = $controler->getElement('box');

$page = "<div class='media-title'><h2>{$title}</h2></div><div class='media-image'>{$image}</div><div class="inlinebox">" . $view . "</div><div class='media-desc'>{$desc}</div>";

Попробуйте отделить ваш код.

Я рекомендую вам взглянуть на MVC Framework, на мой взгляд, лучшим является CakePHP.

...