首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php中的RenderBody

问php中的RenderBody
EN

Stack Overflow用户
提问于 2011-09-14 12:56:10
回答 3查看 2.2K关注 0票数 3

如果您曾经使用过ASP.NET MVC,那么您将熟悉RenderBody。基本上,您有一个布局页和几个正文页。就像这样:

layout.cshtml:

代码语言:javascript
复制
<html>
  <head>
    <title>Your Title</title>
  </head>
  <body>
    @RenderBody()
  </body>
</html>

index.cshtml:

代码语言:javascript
复制
@{
   layout = "layout.cshtml";
}

<p>Hello World!</p>

因此,当您调用index.cshtml时,它的所有内容都将显示在布局的@RenderBody部分。当页面使用单个布局时,这是非常有用的。

现在,我的问题是,我如何实现类似于上面的php代码?

编辑

对于那些不熟悉ASP.NET的人,当您有一个index2.cshtml文件时,如下所示:

代码语言:javascript
复制
@{
   layout = "layout.cshtml";
}

<p>Hello World, once again!</p>

然后,当您调用index2.cshtml,这次是'Hello,再一次!‘会被打印出来。因此,基本上,在定义页面布局时,其所有内容都显示在页面布局的@RenderBody部分。您不需要显式地定义布局中要包含的页面。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-14 13:00:57

我不知道ASP.NET,但是下面是您在PHP中最可能做同样的事情:

代码语言:javascript
复制
<html>
  <head>
    <title>Your Title</title>
  </head>
  <body>
    <?php include('body.php'); ?>
  </body>
</html>

然后body.php可以包含

代码语言:javascript
复制
<p>Hello World!</p>

(非常)简单的路由示例:

代码语言:javascript
复制
$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:

代码语言:javascript
复制
<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模板:)

票数 3
EN

Stack Overflow用户

发布于 2011-09-14 13:11:16

你也可以用细枝做这件事

main_layot.twig:

代码语言:javascript
复制
<!DOCTYPE html>
<html>
    <head>
        <title>Example</title>
    </head>
    <body>
            {% block content %}{% endblock %}
    </body>
</html>

和内容:

代码语言:javascript
复制
{% extends "main_layout.twig" %}

{% block content %} Content {% endblock %}
票数 2
EN

Stack Overflow用户

发布于 2012-03-04 01:22:05

我知道这是一个老问题,但是从ASP.net+MVC3开发中我找到了一个更好的解决方案。

创建一个master.php页面,如这个页面(使用doctype和其他任何东西等等)

master.php:

代码语言:javascript
复制
<head> 
    my_stuff, meta tags, etc.
    <title><?php echo $page_title; ?></title>
</head>
<body>
    <?php include('$page_content') ?>
</body>

接下来,我有一个单独的文件夹来保持它的整洁,您不需要(例如,内容/)将所有的内容文件放在这个文件夹中,您在ASP.net页面中包含的内容,我将调用我的default.php

default.php:

代码语言:javascript
复制
<div>
    Hello World
</div>

然后创建要点击的文件以加载页面内容,我将调用我的index.php

index.php:

代码语言:javascript
复制
<?php
    $page_title = 'Hello Example';
    $page_content = 'Content/default.php';
    include('master.php');
?>

缺点是:

  • 每页有两个文件,这可以通过直接将页面内容放入变量来避免,但是我更喜欢单独的文件来保持整洁。

好处:

  • 没有额外的.htaccess或任何额外的服务器需求
  • 允许每个页面传递无限数量的变量。
  • 模仿ASP.net RenderBody()函数,就像您想要的那样:D

这绝不是一个原创的想法,我找到了另一个使用这种方法的网页,这正是我想要在我的网页中做的。

这篇文章和我在谷歌搜索如何做同样的事情时发现的一样,所以我想用我的解决方案来回答。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7416665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档