【问题标题】:Implementing master pages functionality. PHP实现母版页功能。 PHP
【发布时间】:2012-05-18 13:46:19
【问题描述】:

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

谢谢!

附:也许有第三方工具可以达到这个目的?

编辑

好的。问题与 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/

【问题讨论】:

  • 您在 PHP 中使用任何框架吗? PHP 没有开箱即用的 MVC,因此您需要选择一个 MVC 框架,并且大多数时候它们都有自己的“布局/模板”引擎。看看 Code Igniter、Kohana、Sympfony 等。
  • 我根本不考虑 MVC 模式。所需要的只是母版页的概念。
  • 好吧,你将它与作为 MVC 的 ASP.NET 进行了比较,所以我发现你需要某种 mvc 引擎......
  • 如果你想使用模板,无论如何你都需要 MVC。试用 PHP 无脂肪框架。它很轻。 bcosca.github.com/fatfree

标签: php master-pages


【解决方案1】:

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

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

使用 PHP 的打开和关闭标签来获得接近模板功能的东西。 例如一个普通的页面应该是这样的:

虽然包含(且可重复包含)的内容可能如下所示:

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

【讨论】:

    【解决方案2】:

    顺便说一句,我知道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
    

    剃须刀、刀片、懒人溜冰鞋

    【讨论】:

      【解决方案3】:

      在 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/

      【讨论】:

        【解决方案4】:

        Twig 模板引擎提供Template Inheritance

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

        可以单独使用,但由流行的symfony framework背后的人制作。

        【讨论】:

          【解决方案5】:

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

          它通过渲染一个模板并将结果传递给另一个(主)模板来工作。

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

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

          NameOfMasterTemplate 有外层html

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

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              【解决方案7】:

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

              &lt;li&gt;&lt;a href="master.php?page=blog.php"&gt;BLOG&lt;/a&gt;&lt;/li&gt;

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2011-03-24
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多