2012-05-18 51 views
5

如何在php中製作母版頁?像ASP.NET MVC中的Layout.cshtml(和RenderBody())?實現母版頁功能。 PHP

謝謝!

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/
+0

你在PHP中使用任何框架嗎? PHP沒有開箱即用的MVC,所以你需要選擇一個MVC框架,而且大多數時候它們都有自己的「佈局/模板」引擎。看看Code Igniter,Kohana,Sympfony等。 – allaire

+0

我根本不考慮MVC模式。所有需要的是母版頁的概念。 – lexeme

+0

那麼你比較ASP.NET是MVC,所以我想你需要某種mvc引擎... – allaire

回答

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 

剃鬚刀,刀片,loller冰鞋

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

這裏的w ^帽子PHP標準框架/ api支持:

require("/definitions.php")函數加載類,函數和常量從一個文件中定義並輸出PHP代碼之外的內容到php:// stdout(在web服務器上,這是發送到瀏覽器)。您可能想要使用require_once導入依賴項(包含定義的php文件)。

使用PHP的打開和關閉標籤來獲得接近模板功能的東西。 例如正常的網頁看起來是這樣的: normal page

而包含的(和重複包含內容)一個看起來是這樣的: enter image description here

我不是說「不使用模板引擎」 ,只是展示了一種明確而簡單的方法來實現PHP故意構建的東西。如果這足夠滿足你的需求,我就會說「不要爲了它而使用模板引擎」(順便說一句,如果你很整潔,你可以很容易地將邏輯從視圖中分離出來,沒有嚴格的,有時甚至是麻煩的MVC框架)。

1

樹枝模板引擎提供Template Inheritance

枝條最強大的部分是模板繼承。模板繼承允許您構建一個基本「骨架」模板,其中包含您網站的所有常見元素,並定義子模板可以覆蓋的塊。

可以作爲獨立使用,但是由流行的symfony framework背後的人做出。

1

前一段時間(幾年),我取得了這樣的事情使用Smarty的,並擴展它包含對DisplayMaster的效果(「NameOfTemplate」,「NameOfMasterTemplate」)

它通過渲染的方法模板並將結果傳遞到另一個(主)模板。

以上有2個模板: NameOfTemplate只是主要內容部分,例如,

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

NameOfMasterTemplate具有外部HTML

<html>...<body><div class="layout">{$innerHtml}</div></body></html> 
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>