CodeIgniter - Intégrer facilement un header et un footer à toutes les pages de votre site
Salut,
Un des grands problèmes qui se posent (je pense qu’il se pose pour tout le monde) quand on commence avec CodeIgniter est “Comment fait-on pour ne pas avoir à réécrire le header et le footer à chaque fois ? D’habitude j’utilise des includes”.
Il existe pas mal de solutions, plus ou moins complexes sur le wiki officiel de CodeIgniter.
N’ayant pas vraiment cherché quand la question s’est posée pour moi, j’ai développé ma propre solution. Je la trouve flexible et conceptuellement juste (je peux me tromper :)) vis à vis du framework.
Le principe réside dans l’extension de la classe Controller et jouer avec le principe d’héritage des méthodes.
Pour l’exemple, nous utiliserons un contrôleur Blog.php dont la méthode index() affiche la liste des billets du blog en appelant la vue afficher_billets.
NB: veuillez m’excuser pour la forme, mais tumblr ne propose pas toutes les options de mise en page dont j’aurais besoin :p Je le referai peut-être sous forme d’un screencast !
- Je créé un fichier MY_Controller.php (assurez vous dans la configuration que le prefixe d’extension est bien MY_, il l’est par défaut) dans le répertoireapplication/libraries.
- Je fais hériter mon contrôleur Blog de MY_Controller et non plus de Controller:
class Blog extends MY_Controller {
function Blog() {
parent::MY_Controller();
}
}
N’oubliez pas de modifier le constructeur de Blog.php !
- Dans le fichier MY_Controller.php, j’écris deux méthodes:
private function afficher_header() {
$this->load->view(‘header’);
}
private function afficher_footer() {
$this->load->view(‘footer’);
}
- A présent, on crée les deux vues header.php et footer.php dans le répertoire application/views. Je vous laisse le soin de les remplir, généralement mon header contient les informations des balises <head> et l’ouverture de <body> ainsi que, pourquoi pas, le menu. Et mon footer, bah les informations légales et le blablabla habituel.
- Et maintenant, vous pouvez charger votre vue afficher_billets comme cela:
$this->afficher_header();
$this->load->view->(‘afficher_billets’,$data);
$this->afficher_footer();
-
Pour éviter de devoir écrire ces trois lignes à chaque fois (et d’en oublier par la même occasion) j’ai développé une méthode chargement_vue dans leMY_Controller:
function chargement_vue($vue,$data) {
$this->afficher_header();
$this->load->view->($vue,$data);
$this->afficher_footer();
}
-
Vous faites à présent appel à votre vue comme cela:
$this->chargement_vue(‘afficher_billets’,$data);
Le premier intérêt de la méthode est que sur toutes vos pages vous aurez le header et le footer dès que vous ferez appel à une vue (après tout, c’était le but :p).
Le second intérêt c’est que vous pouvez réécrire les méthodes afficher_header()et afficher_footer() dans un contrôleur pour lui donner un comportement particulier pour certaines pages. Et tout ceci proprement.
N’hésitez pas à me faire part de vos remarques, qu’elles concernent le fond ou la forme !