Codeigniter reutilisation des templates

Résolu/Fermé
fredconv Messages postés 122 Date d'inscription mardi 25 août 2009 Statut Membre Dernière intervention 4 décembre 2017 - 22 août 2012 à 16:32
fredconv Messages postés 122 Date d'inscription mardi 25 août 2009 Statut Membre Dernière intervention 4 décembre 2017 - 22 août 2012 à 17:27
Bonjour,

je viens tout juste de me mettre a codeigniter pour essayer d avoir une facon de travailler plus structurée (mvc).

J'ai fait les tutoriels mais je ne suis pas encore au bout mais ça avance

le problème que j ai maintenant est le suivant:
j utilise une base de donnée avec plusieurs tables (projets, histoire, personnes, ..)
j ai créé a chaque fois un controleur / model / view pour afficher cela dans des tableaux pour le moment
j'utilise également 3 templates: header.php, navigation.php et footer.php pour ne pas reecrire le code à chaque fois...

par exemple pour la table "projets" j ai
un controller: projet_control.php
un model: projet_model.php
et dans view:projet_view.php

et ainsi de suite pour chaque objet que je souhaite afficher.

dans mon projects_control.php j ai a un moment donné:
$this->load->view('templates/header', $data);
$this->load->view('templates/navigation', $data);
$this->load->view('projects/view', $data);
$this->load->view('templates/footer');

et dans histoire_control.php
dans mon projects_control.php j ai a un moment donné:
$this->load->view('templates/header', $data);
$this->load->view('templates/navigation', $data);
$this->load->view('histoire/view', $data);
$this->load->view('templates/footer');



le hic c est que dans chacun de mes contrôleurs (pour les autres tables) je dois répéter cette portion de code.

existe il un moyen pour que cela se fasse de façon plus simple encore... ?

j imagine qu'écrire une sorte de fonction a laquelle je passerai en paramètre juste le nom du contrôleur actuel serait utile.. ou quelque chose comme ça pour que quand j appelle cette fonction le code pour appeler les templates soient déjà implémenter et je changerai juste le dossier.... mais je ne vois pas ou et comment faire cela puisque mes contrôleurs ne partagent pas un même source ..

donc si quelqu'un a une petite idée, merci d avance.

1 réponse

fredconv Messages postés 122 Date d'inscription mardi 25 août 2009 Statut Membre Dernière intervention 4 décembre 2017 38
22 août 2012 à 17:27
Yop

Ok j ai trouvé :) je mets la solution ici
Utiliser une base class My_controller ,

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 
class MY_Controller extends CI_Controller {
 
 public function __construct()
 {
  parent::__construct();
       
 
 }
 

 
 	public function load_my_tpl($data,$controler = false,$methode = view)
	{
		$this->load->view('templates/header', $data);
		$this->load->view('templates/navigation', $data);
		$this->load->view($controler.'/'.$methode, $data);
		$this->load->view('templates/footer');

	}
 
}


et les autres controlers seront etendu a ce my_controler plutot que le CI_controller.


et dans les controlers enfant plus qu a appeler cette fonction comme ca :
$this->load_my_tpl($data,'projects','index');
....

0