aimez-vous vraiment copier/coller de nombreux $ this-> load-> view() à n'importe quelle fonction de contrôleur? C'est un code spaghetti. Vous pouvez essayer ensuite: par exemple, nous avons le contrôleur main.php comme contrôleur par défaut. Ce contrôleur principal contient la fonction principale:
public function index()
{
ob_start();
$this->load->model('mainmodel');
$data = $this->mainmodel->_build_blocks(); //return array with needed blocks (header, menu, content, footer) in correct order
foreach ($data->result_array() as $row) {
$this->load->module($row['block_name']);
$this->name = new $row['block_name'];
$this->name->index();
}
ob_end_flush();
}
Ainsi, l'autre contrôleur ont également la fonction d'index() qui peut envoyer des actions dépend de segments d'URL, préparer params etc.
contrôleur bas de page comme exemple (j'utilise Smarty comme moteur de template):
public function index()
{
$this->mysmarty->assign('year', date("Y"));
$this->mysmarty->view('footer');
return true;
}
contrôleur de contenu aura:
public function index()
{
$name = $this->uri->segment(1, 'index');
$act = $this->uri->segment(2, 'index');
$this->load->module($name);
$this->name = new $name;
$pageData = $this->name->_show($act);
if ($pageData)
{
$this->mysmarty->assign($name, $pageData);
}
$this->mysmarty->view($name);
}
Cest dire si vous voulez montrer http://site.name/page/contactus, nous suivant:
1) main.php démarrer le cycle par des blocs nécessaires
2) tout d'abord, nous montrons header.tpl par le contrôleur d'en-tête
3 Ensuite, nous montrons le menu
4) alors nous appelons le contrôleur de contenu qui analyse l'URL, a trouvé ce qu'il devrait appeler la fonction _show() dans le contrôleur de page et lui passer l'action = 'contactus'. fonction _show() peut contenir un certain commutateur/construction de cas qui montrent des modèles dépend du nom d'action (contactus.tpl dans ce cas)
5) à la fin nous afficher le modèle de bas de page
Dans ce cas, nous avons la structure souple . Tous les contrôleurs doivent avoir des fonctions index() et tous les contrôleurs pouvant être appelés dans le contenu doivent avoir la fonction _show ($ act). C'est tout.