En realidad, después de investigar un poco sobre esto, llegué a la conclusión de que la mejor práctica para incluir encabezados y pies de página en MVC es una tercera opción: ampliar un controlador base. Eso le dará un poco más de flexibilidad que la sugerencia de htxt, particularmente si está construyendo un diseño muy modular (no solo el encabezado y el pie de página, también los paneles de la barra lateral, los menús no estáticos, etc.).
Primero, defina una clase Base_controller, en la que cree métodos que anexen los elementos de su página (encabezado, pie de página, etc.) A una cadena de salida:
class Base_controller extends Controller
{
var $_output = '';
function _standard_header($data=null)
{
if (empty($data))
$data = ...; // set default data for standard header here
$this->_output .= $this->load->view('header', $data, true);
}
function _admin_header($data=null)
{
if (empty($data))
$data = ...; // set default data for expanded header here
$this->_output .= $this->load->view('admin_header', $data, true);
}
function _standard_page($data)
{
$this->_standard_header();
$this->_output .=
$this->load->view('standard_content', $data, true);
echo $this->_output; // note: place the echo statement in a
// separate function for added flexibility
}
function _page_with_admin_header($data)
{
$this->_admin_header($data);
$this->_output .=
$this->load->view('standard_content', $data, true);
echo $this->_output;
}
}
Luego, en los controladores de la página, simplemente extender la clase base y llame a las funciones para construir la página.
class Page_controller extends Base_controller
{
function index()
{
$data = ...; // Set content data here
$this->_standard_page($data);
}
function admin()
{
$data = ...; // Set content and header data here
$this->_page_with_admin_header($data);
}
}
El uso de un controlador base, se puede lograr un código muy limpio en sus controladores de páginas individuales y tienen unas vistas separadas para los elementos de la página (que permite la reutilización de código en ambas vistas y controladores). Todo lo que necesita hacer es definir sus 'secciones' comunes de página (lo que podría estar tentado de llamar 'fragmentos') como funciones en su controlador base.
Y si el controlador base debería comenzar a crecer incontrolablemente (lo que puede suceder en sitios grandes), puede reorganizar algunas de sus funciones menos generales colocándolos en subclases y dejar que los controladores de página correspondientes amplíen esos en lugar del controlador base original.
¡Disfrútalo!
/Jens Roland
Debido a que su pregunta era sobre CodeIgniter - Sólo quiero que transmita a la forma en Zend Framework se encarga de esto: http://framework.zend.com/manual/en/zend.layout.html – leek