2011-09-10 7 views
7

Sto lavorando al mio framework MVC. Di seguito è riportato un controller di esempio che ho finora.Come caricare le viste MVC nel file di modello principale

Ho un modo di caricare modelli nel mio controller e anche di visualizzare i file.

Desidero anche avere diverse opzioni di modello per il mio sito. Il mio modello sarà solo un layout di pagina che inserisce le viste create dal mio controller nel mezzo del mio file di modello.

/** 
* 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); 
    } 

} 

Ecco un'idea di base del file di template ...

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> 

Un altro modello, senza alcuna intestazione, piè di pagina, tutto il resto, può essere utilizzato per chiamate AJAX

EmptyLayout.php 

<?php 
$content 
?> 

Sto cercando idee su come posso caricare il mio file di modello principale e quindi includere e visualizzare i file nell'area del contenuto del mio file di layout principale?

Nel file di layout di esempio, è possibile vedere che l'area del contenuto ha una variabile denominata $ contenuto. Non sono sicuro di come posso popolare con il contenuto delle visualizzazioni, da inserire nel mio modello di layout principale. Se avete idee, si prega di inviare campione

risposta

12

Qualcosa di un po 'come

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; 
} 

Quindi utilizzare con

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

Questo è grande, ho sempre necessario formattare e impostare l'uscita del contenuto all'interno del controller/quindi utilizzare 'file_get_contents' e quindi sostituire i segnaposto nella vista, ad esempio:'

{content}

'con str_replace. Roba buona –

Problemi correlati