如果您使用过ASP.NET MVC,那么您对RenderBody很熟悉。基本上,您有一个布局页面和几个正文页面。像这样:
layout.cshtml:
<html>
<head>
<title>Your Title</title>
</head>
<body>
@RenderBody()
</body>
</html>
index.cshtml:
@{
layout = "layout.cshtml";
}
<p>Hello World!</p>
因此,当您调用index.cshtml时,其所有内容都将显示在布局的@RenderBody
部分中。当您的页面使用单个布局时,这非常有用。
现在,我的问题是,我怎么能在php中实现类似上面代码的东西?
修改
对于那些不熟悉ASP.NET的人,当你有这样的index2.cshtml文件时:
@{
layout = "layout.cshtml";
}
<p>Hello World, once again!</p>
然后当你再次调用index2.cshtml'Hello World,再次!'会被打印出来。基本上,当您定义页面的布局时,其所有内容都显示在其布局的@RenderBody部分中。您不必明确定义要在布局中包含的页面。
答案 0 :(得分:3)
我不知道ASP.NET,但这里你很可能在PHP中做同样的事情:
<html>
<head>
<title>Your Title</title>
</head>
<body>
<?php include('body.php'); ?>
</body>
</html>
然后和body.php
可以包含
<p>Hello World!</p>
(非常)简单的路由示例:
$router = new RequestRouter; //this class would route a request to a set of templates stored in a persistent storage engine like a database
$request = $_SERVER['QUERY_STRING'];
$templates = $router->resolve($request); //would return an array with the templates to be used
include('master.php');
master.php:
<html>
<head>
<title>Your Title</title>
</head>
<body>
<div>
<?php include($templates['top']); ?>
</div>
<div>
<?php include($templates['middle']); ?>
</div>
<div>
<?php include($templates['bottom']); ?>
</div>
</body>
</html>
然后,您可以为数据库中的每个页面定义top
,middle
和bottom
模板:)
答案 1 :(得分:2)
你可以(也)使用Twig:
main_layot.twig:
<!DOCTYPE html>
<html>
<head>
<title>Example</title>
</head>
<body>
{% block content %}{% endblock %}
</body>
</html>
和内容:
{% extends "main_layout.twig" %}
{% block content %} Content {% endblock %}
答案 2 :(得分:1)
我知道这是一个较老的问题,但是从ASP.net + MVC3开发我发现了一个更好的解决方案。
创建一个master.php页面,例如这个(使用doctype和其他任何内容等等,你会得到这个想法)
master.php:
<head>
my_stuff, meta tags, etc.
<title><?php echo $page_title; ?></title>
</head>
<body>
<?php include('$page_content') ?>
</body>
接下来我有一个单独的文件夹只是为了保持整洁,你不需要(例如Content /) 将所有内容文件放在此文件夹中,包含在ASP.net页面中的内容,我将其称为默认文件.php
如default.php:
<div>
Hello World
</div>
然后创建要点击的文件以加载页面内容,我将调用我的index.php
的index.php:
<?php
$page_title = 'Hello Example';
$page_content = 'Content/default.php';
include('master.php');
?>
缺点:
优点:
这绝不是一个原创的想法,我找到了另一个使用这种方法的网页,这正是我想在我的网页上做的。
这个SO帖子与我在谷歌上搜索如何做同样的事情是一样的,所以我想用我的解决方案回答。