1 - 這是一個偏好問題。最簡單的方法是有一個單獨的頁眉和頁腳文件。然後,你可以做這樣的事情在你的頁面控制器
$title="Page Title";
$var1 = 'var1';
$var2 = 'var2';
$var3 = array("asdf","adsfasdf","234");
include(HEADER); //$title is in header
include(DIR_VIEWS . 'page.php'); //$var1/2/3 are in page.php
include(FOOTER);
// variable were created before pages were included so they will be set in the templates
如果你去,你將不得不開始與str_replace函數擺弄嵌套路徑和啓動對模板引擎的標題,超出範圍的這個答案。
2 - 無需製作視圖對象。一個「視圖」可以只是一個包含該視圖的html文件的文件。就像我上面的例子。這些頁面也可以包含基本的php以循環/回顯變量。
3 - 您正在描述前端控制器(有時稱爲調度程序或路由器)。這真的是要走的路。有幾種創建前端控制器的方法。
你可以有一個指向控制器的網址數組。
$routes = array (
'~^/home/$~' => 'home.php',
'~^/contact/$~' => 'contact.php',
'~^/blog/.*?$~' => 'blog.php'
);
或者您可以使用url中的第一個「目錄」作爲控制器名稱並從控制器目錄加載該文件。
4 - 控制器的全部要點是從模型中獲取信息並將數據傳遞給視圖。
編輯的評論
如果你想了一堆意見,有一個側邊欄,你只是包括其他的觀點看法。例如:
<div id="content">
<p>lorem ispum stuff</p>
</div>
<?php include(DIR_VIEWS . 'sidebar.php');
只要確保在與側邊欄的「控制」頁面,包括側邊欄功能的一些代碼控制器:
if ($_GET['keywords']) {
$sidebar_search_results = get_search_results($_GET['keywords']);
}
// this code should be in a file that you include
$sidebar_search_results
可能是導致你的側邊欄視圖解析數組並顯示。
對於嵌套視圖,我認爲我的問題是:如果我有4個非常不同的視圖 - 但它們都共享一個公共元素(讓我們說新聞面板)。我想讓新聞面板在4個主視圖中的每一箇中都嵌套。問題是新聞面板需要從某處獲取數據。如果新聞小組有搜索功能呢?那麼它也需要一個控制器,以確保搜索參數正在處理中。我怎麼能這樣做? – Cam 2010-05-16 21:24:47
@ Galen的「編輯點評」:對於嵌套的觀點,這個想法是觀點應該是相當獨立的 - 也就是說,我希望能夠立即將它們切換出來。這種方式雖然,我添加了不必要的代碼給頂部的控制器,如果我有太多深層嵌套的視圖,這可能會變得非常煩人。你怎麼看? – Cam 2010-05-16 23:46:48
如果您有搜索功能,您將需要代碼來執行搜索。無論如何,這必須在控制器中。如果您需要切換側邊欄的佈局,只需使用新代碼覆蓋sidebar.php即可。 – Galen 2010-05-17 00:07:35