2011-09-10 63 views
7

我正在開發自己的MVC框架。下面是我迄今爲止的示例控制器。如何將MVC視圖加載到主模板文件中

我有一種加載模型到我的控制器和查看文件的方法。

我想爲我的網站也有不同的模板選項。我的模板只是一個頁面佈局,將從我的控制器創建的視圖插入我的模板文件的中間。

/** 
* Example Controller 
*/ 
class User_Controller extends Core_Controller { 

    // domain.com/user/id-53463463 
    function profile($userId) 
    { 
     // load a Model 
     $this->loadModel('profile'); 

     //GET data from a Model 
     $profileData = $this->profile_model->getProfile($userId); 

     // load view file and pass the Model data into it 
     $this->view->load('userProfile', $profileData); 
    } 

} 

這裏是模板文件的基本思路...

DefaultLayout.php 

<!doctype html> 
<html lang="en"> 
<head> 
</head> 
<body> 



Is the controller has data set for the sidebar variable, then we will load the sidebar and the content 
<?php if(! empty($sidebar)) { ?> 

<?php print $content; ?> 

<?php print $sidebar; ?> 


If no sidebar is set, then we will just load the content 
<?php } else { ?> 

<?php print $content; ?> 

<?php } ?> 

</body> 
</html> 

,可用於AJAX沒有任何頁眉,頁腳,別的另一個模板調用

EmptyLayout.php 

<?php 
$content 
?> 

我正在尋找關於如何加載我的主模板文件,然後包括並查看文件到我的主佈局文件的內容區域的想法?

在示例佈局文件中,您可以看到內容區域有一個名爲$ content的變量。我不知道如何將視圖內容填充到插入到我的主佈局模板中。如果您有任何意見,請發表樣本

回答

12

喜歡的東西

function loadView ($strViewPath, $arrayOfData) 
{ 
// This makes $arrayOfData['content'] turn into $content 
extract($arrayOfData); 

// Require the file 
ob_start(); 
require($strViewPath); 

// Return the string 
$strView = ob_get_contents(); 
ob_end_clean(); 
return $strView; 
} 

那麼一點點與

$sidebarView = loadView('sidebar.php', array('stuff' => 'for', 'sidebar' => 'only'); 
$mainView = loadView('main.php', array('content' => 'hello',, 'sidebar' => $sidebarView); 
+0

這是偉大的使用,我總是格式化並在控制器內設定的內容輸出/模型,然後使用'file_get_contents',然後用str_replace替換視圖中的佔位符,例如:'

{content}

'。好東西 –

相關問題