首页 > 解决方案 > 如何组成一个包含多个部分的视图,这些部分具有需要跨越的变量?

问题描述

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

布局.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>

视图.php

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

<h1>Content</h1>

如果我想组合这两个文件并正确渲染视图怎么办?对我来说,问题在于 $pageTitle 在 vi​​ew.php 内部,并且 view.php 应该代替 layout.php 的“内容来了”

如何解决这个问题?

我尝试一个接一个地包含文件,但这并不好,因为无论首先包含哪个文件,它都会错过下一个包含文件中的变量。

标签: phpview

解决方案


您可以将 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>

我希望,这就是你要的:)


推荐阅读