如何用包含需要跨变量的多个部分组成一个视图?

时间:2019-03-24 17:52:35

标签: php view

我在同一文件夹中有2个文件

layout.php

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title><?= isset($pageTitle) ? $pageTitle : '' ?></title>
</head>
<body>

<nav>
    <ul>
        <li><a href="">Home</a></li>
        <li><a href="">About</a></li>
        <li><a href="">Contact</a></li>
    </ul>
</nav>

<div class="container">
    HERE COMES THE CONTENT
</div>

</body>
</html>

view.php

<?php $pageTitle = 'Welcome'; ?>

<h1>Content</h1>

如果我想合并这两个文件并正确渲染视图怎么办? 对我造成问题的是$ pageTitle位于view.php内部 并且该view.php应该代替layout.php的“内容”

如何解决这个问题?

我尝试了一个接一个地添加文件,但是这样做不好,因为首先包含的文件会丢失下一个包含的文件中的变量。

我希望有人能理解这一点,并帮助我和其他人解决这样的问题。

1 个答案:

答案 0 :(得分:1)

您可以将PHP和HTML文件合并为一个(当然,它仍然需要.php扩展名才能正确处理)并动态创建内容。

<?php
    // some PHP part
    $pageTitle = 'Welcome';
    $content = '<h1>Content</h1>';

    // OR, for dynamic load (separated files)
    ob_start();
    include_once('some/html/file.html'); /* or it could be another PHP file echoing content */
    $content = ob_get_contents();
    ob_end_clean();
?>

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title><?php echo (isset($pageTitle)) ? $pageTitle : ''; /* some other PHP part */ ?></title>
</head>
<body>

<nav>
    <ul>
        <li><a href="">Home</a></li>
        <li><a href="">About</a></li>
        <li><a href="">Contact</a></li>
    </ul>
</nav>

<div class="container">
    <?php echo $content; /* print the content */ ?>
</div>

</body>
</html>

我希望这就是您要的:)