Hay varias maneras de poder implementer un menu o un widget:
Tal como lo dice Destor(que obviamente tendrias que repetirlo en cada controller y eso no es bueno), la otra crear un sistema modular: menu, comentarios, user.
Y llamar desde tu template por ejemplo con file_get_contents(aunque tampoco es buena idea) - recuerda que toda la vista al final se unifica y puede recibir cualquier variable desde el controller asi por ejemplo tienes tu modulo menu
menu
---controller
---models
---views
Se lo envias desde el controller o lo puedes llamar desde tu vista un ejemplo de como lo implementa Codeigniter y el sistema HMVC es llamadolo de esta manera
module::run('menu', $foo, $var....)
Tu esto lo puedes llamar de cualquier parte de tu vista o controller, las variables que le pasas la toma el controlador.
Ejemplo :
module::run('menu', $idioma, $rol);
Obviamente tu modulo menu tiene que estar preparado para recibir/trabajar con esas variables e imprimir el resultado.
Partiendo de esa idea puedes crear tu sistema. Con mas orden y mas facil de mantener. Y tus modulos reutilizables.
Otro ejemplo seria con los comentarios
module comentarios
comentarios
--views
--controllers
--models
module::run('comentarios', $post_id, $rol, $visible);
Un practico ejemplo usando este mismo metodo seria:
Por ejemplo el sistema de comentarios(Es solo de ejemplo):
Código PHP:
Ver originalclass PostsController extends controller{
function mostrartodos(){
/* muestras todos los post */
}
/*mostrar un post*/
function mostrarpost($post_id){
/////// dependiendo de como lo hagas puedes agregarlo al constructor para evitar ponerlo en todos los actions///////
$vars['post_id'] = $post_id;
$vars['role'] = "1;"
$vars['visible'] = TRUE;
//////
$vars['posts'] = (array de los post obtenidos del model
); $this->load->view('layout_principal', $vars);
}
}
En tu vista:
layout_principal.phtml
<html>
<single post>
........
</single post>
<comentarios>
<?php module::run('comentarios', $post_id, $role, $visible); ?>
<comentarios>
</html>
Se que es bastante abstracto pero alli entra la habilidad del quien lo vea/haga/entienda
TODO ESTE EJEMPLO ESTA BASADO EN LA ESTRUCTURA MVC DE CODEIGNITER.