2011-09-10 10 views
7

Estoy trabajando en mi propio framework MVC. Debajo hay un ejemplo de controlador que tengo hasta ahora.Cómo cargar vistas MVC en el archivo de plantilla principal

Tengo una forma de cargar modelos en mi controlador y también ver archivos.

Estoy queriendo tener también diferentes opciones de plantilla para mi sitio. Mi plantilla será simplemente un diseño de página que inserta las vistas que se crean desde mi controlador en el medio de mi archivo de plantilla.

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

} 

Aquí es una idea básica del archivo de plantilla ...

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> 

otra plantilla sin ningún encabezado, pie de página, todo lo demás, se puede utilizar para llamadas AJAX

EmptyLayout.php 

<?php 
$content 
?> 

Estoy buscando ideas sobre cómo puedo cargar mi archivo de plantilla principal y luego incluir y ver archivos en el área de contenido de mi archivo de diseño principal.

En el archivo de diseño de muestra, puede ver que el área de contenido tiene una variable llamada $ contenido. No estoy seguro de cómo puedo llenar eso con el contenido de las vistas, para insertarlo en mi plantilla de diseño principal. Si tienes alguna idea, por favor, puesto muestra

Respuesta

12

Algo un poco como

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

A continuación, utilice con

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

Esto es muy bueno, siempre formato y establezca la salida de contenido dentro del controlador/modele luego use 'file_get_contents' y luego reemplace los marcadores de posición en la vista, por ejemplo:'

{content}

'with str_replace. Buen material –

Cuestiones relacionadas