实现母版页功能。 PHP

时间:2012-05-18 13:46:20

标签: php master-pages

如何在php中制作母版页?就像ASP.NET MVC中的Layout.cshtml(和RenderBody())一样?

谢谢!

P.S。也许这是为了这个目的的第三方工具?

修改

确定。事情不是关于MVC架构!请看这里:http://jsfiddle.net/challenger/8qn22/109/

  1. I want the master page/layout to stay when user gets redirected to the other page
  2. Want an average page to be nested inside the content divisionSo if it is a form I want this form to be displayed like: http://jsfiddle.net/challenger/XgFGb/17/

7 个答案:

答案 0 :(得分:6)

这是PHP标准框架/ api支持的内容:

require("/definitions.php")函数从文件中加载类,函数和常量,并将PHP代码之外的内容输出到php:// stdout(在Web服务器上,这是发送到浏览器的内容)。您可能希望使用require_once导入依赖项(带有定义的php文件)。

使用PHP的open和close标签获取与模板功能相近的内容。 例如,普通页面看起来像这样: normal page

虽然包含(并且可重复包含)的内容可能如下所示: enter image description here

我没有说"不使用模板引擎"只是展示了一种清晰简单的方法来实现PHP专门为之构建的内容。如果这足以满足您的需求,那么我会说"不要为了它而使用模板引擎" (顺便说一句,如果你很整洁,你可以轻松地将逻辑与视图分开,而不需要严格的,有时是繁琐的MVC框架)。

答案 1 :(得分:1)

副手,我知道Laravel framework包含Blade templating engine。它使用与Razor非常相似的语法。

示例:

@layout('master')

@section('navigation')
    @parent
    <li>Nav Item 3</li>
@endsection

@section('content')
    Welcome to the profile page!
@endsection

Razor,Blade,loller skates

答案 2 :(得分:1)

在PHP中,有一种非常类似的模板技术。您有一个模板,而不是母版页。语言本身没有内置的模板功能,但有第三方模板引擎(Smarty,PHPTAL和XTemplate,仅举几例)。

如果您想拥有“真正的”母版页,完全可以实现它们。只需将您的母版页包装到一个类中,并将该类包含在您的内容页面中。

Zend Framework还支持两步视图,其中视图模板在布局模板中呈现。我认为这满足了您对母版页的需求。

请参阅以下链接:

  1. Approximating Master Pages in PHP
  2. Is there anything like MasterPages on CodeIgniter Framework?
  3. PHP Equivalent of Master page in ASP.NET
  4. ASP.Net MVC or Zend Framework. What is your opinion
  5. http://hoolihan.net/blog-tim/2008/09/24/simple-masterpages-with-php/

答案 3 :(得分:1)

Twig模板引擎提供Template Inheritance

  

Twig最强大的部分是模板继承。模板继承允许您构建一个基础“框架”模板,其中包含您网站的所有常见元素,并定义子模板可以覆盖的块。

可以单独使用,但是由热门symfony framework背后的人制作。

答案 4 :(得分:1)

确定。这里描述了最适合我的解决方案http://www.phpro.org/tutorials/Introduction-to-PHP-templating.html#9。它容易,快速,并且不会强制您使用模板引擎。酷!

答案 5 :(得分:1)

不久前(几年),我使用Smarty实现了类似的功能,并将其扩展为包含DisplayMaster效果的方法(“NameOfTemplate”,“NameOfMasterTemplate”)

它的工作原理是渲染模板并将结果传递给另一个(主)模板。

以上有2个模板: NameOfTemplate,只有主要内容部分,例如

<div>...{$someProcessing}</div>

NameOfMasterTemplate具有外部html

<html>...<body><div class="layout">{$innerHtml}</div></body></html>

答案 6 :(得分:1)

  

在master.php文件的内容区域中添加这段代码...   我正在使用它,它完全适合我

<li><a href="master.php?page=blog.php">BLOG</a></li>

<div class="container content">

     <?php 
    if(isset($_GET['page']))
    {
        $page_name = $_GET['page'];
        include("/".$page_name);
    }
    ?>
    </div>