Загрузить PHP и HTML-код в PHP-переменную, отображаемую в <div> - PullRequest
0 голосов
/ 22 ноября 2011

Вот мой случай. У меня есть следующий скрипт:

<?php
// ... other code ...
switch($_GET['request'])    {
        case "firstPage":
            $file = APP_ROOT. "pages/firstPage.php";
            $hndle = fopen($file,"r");
            $right_column = fread($hndle, filesize($file));
            fclose($hndle);
            break;
        case "secondPage":
            $file = APP_ROOT. "pages/secondPage.php";
            $hndle = fopen($file,"r");
            $right_column = fread($hndle, filesize($file));
            fclose($hndle);
            break;
    }
}
?>
<div id="right_column">
    <?php echo $right_column;?>
</div>
// ... other code ...

В зависимости от значения $ _GET ['request'] я присваиваю переменной $ right_column содержимое файла php. Затем я повторяю эту переменную в последнем div. Файлы firstPage.php и secondPage.php содержат смешанный код html и php. Я ищу решение, подобное «частичному» в Zend. Спасибо

Ответы [ 4 ]

2 голосов
/ 22 ноября 2011

Прежде всего, ваш код ужасен, он должен выглядеть примерно так:

$pages = array(
   'firstPage'   => 'pages/firstPage.php',
   'secondPage'  => 'pages/secondPage.php'
);

$request = 'firstPage';
if ( array_key_exits($_GET, 'request') 
 &&  array_key_exists($pages, $_GET['request']) )
{
   $request = $_GET['request'];
}
?>
<div id="right_column">
    <?php include  APP_ROOT . $pages[ $request ]; ?>
</div>

Пожалуйста, прочитайте http://codeangel.org/articles/simple-php-template-engine.html, это может показаться вам интересным. Он должен объяснить вам, как вы можете легко воспользоваться преимуществами собственных шаблонизаторов php.

1 голос
/ 22 ноября 2011

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

Вам нужно разобрать файл PHP и отобразить результат.Вы можете сделать это двумя способами:

Во-первых, intead of

 $file = APP_ROOT. "pages/firstPage.php";
 $hndle = fopen($file,"r");
 $right_column = fread($hndle, filesize($file));
 fclose($hndle);

Вы можете сделать:

$right_column = include(APP_ROOT . "pages/firstPage.php");

Итак, ваш firstPage.php должен ВОЗВРАЩАТЬ код,Примерно так:

// firstPage.php
return "my html";

Но вы также можете включить его следующим образом:

<div id="right_column">
    <?php include(APP_ROOT . "pages/firstPage.php"); ?>
</div>

Или вы можете использовать ob_get_contents .PHP имеет хорошую документацию о том, как его использовать.

Я бы использовал include для вашего случая.

0 голосов
/ 22 ноября 2011

Мне кажется, что вы можете программировать по соглашению, а не иметь постоянно увеличивающийся оператор switch:

0 голосов
/ 22 ноября 2011

Вероятно, было бы проще, если вы установите переменную, указывающую, какой PHP-файл включить, а затем вместо чтения файла просто включите его. Например:

<?php
// ... other code ...
switch($_GET['request'])    {
        case "firstPage":
            $file = APP_ROOT. "pages/firstPage.php";
            break;
        case "secondPage":
            $file = APP_ROOT. "pages/secondPage.php";
            break;
    }
}
?>
<div id="right_column">
    <?php include($file);?>
</div>
// ... other code ...

Если ваши файлы firstPage.php и secondPage.php содержат только HTML, то все, что вы делаете, будет работать. Если у него есть PHP, тогда вам нужно include() это; или вы могли бы eval() это, но это снова делает больше работы, чем вам нужно.

...