2010-09-07 5 views
0

J'ai donc un menu dans lequel je veux générer un menu principal basé sur le niveau d'accès de l'utilisateur authentifié. Pas de problème pour créer le menu, mais je veux créer automatiquement le menu généré dans ma vue "en-tête". Donc, dans mon contrôleur j'appelle la vue « en-tête », mais je ne veux pas passer cette partie dynamique de l'en-tête comme ceci:Codeigniter Comment créer dynamiquement le menu

$data['menu'] = 'Some Generated HTML Menu'; 
$this->load->view('header',$data); 

Je préférerais qu'il soit inclus déjà dans mon dossier d'en-tête, mais Je ne suis pas sûr exactement comment faire ceci (en dehors de l'ajout de la déclaration $ data depuis l'intérieur de mon constructeur).

Répondre

0

Je ne sais pas si cela vous aidera, mais c'est ainsi que j'ai fait mon système de gabarit le plus longtemps avant de passer à une méthode plus avancée.

Top Chef: vues/inc/top_head.php

<html> 
<head> 
<!-- all of your imports you want across all pages --> 

Bottom Head: vues/inc/bottom_head.php

je le fais de cette façon que je puisse partager et ajouter des choses Javascript personnalisées et peut-être apporter des importations de cas spéciaux.

</head> 
<body> 
<div id="main_container"> 
    <div id="navigation"> 
     <?php 
       // DO YOUR NAVIGATION MAGIC HERE 
       if($is_logged_in) : 
        // BAM MAGIC DONE 
       else : 
        // No magic show here 
       endif; 
     ?> 
    </div> 

Pied de page: vues/inc/footer.php

C'est là que vous mettrez dans vos choses de bas de page, etc ....

</div> 
</body> 

Maintenant, nous sommes au point que nous devons réellement remplir le contenu dans le modèle

Index Page:/views/some_controller/index .php

<?php $this->load->view('inc/top_head.php'); ?> 

<?php $this->load->view('inc/bottom_head.php;) ?> 

<h1>Hello</h1> 
<p>Some filler content and stuff I guess would go here...Of course</p> 

<?php $this->load->view('inc/footer.php'); ?> 

Donc là, nous avons un système de template rapide. Maintenant pour vous montrer ce que j'ai fait pour un contrôleur

<?php 

class Some_Controller extends Controller { 
    public $page_data; 

    public function __construct() { 
     parent::__construct();  // Load parent constructor 

     // This is page data that we obviously don't want to keep retyping 
     $this->page_data = array(
      'is_logged_in' => FALSE, // Obviously do some test here 
      'page_title' => 'Some Title' 
     ); 
    } 

    public function index() { 
     $this->_load('some_controller/index'); 
    } 

    /** Should think of a better name but meh */ 
    private function _load($view) { 
     $this->load->view($view, $this->page_data); 
    } 
} 

J'espère que cela a aidé d'une manière ou d'une autre. Rappelez-vous ceci est une écriture rapide. Si je voulais vraiment que cela passe en production, j'aurais déplacé la fonction _load dans une classe parente et l'ai étendue. Je voudrais également déplacer la variable page_data avec elle.

0

Vous pouvez simplement faire $ data ['menu'] = un tableau multidimensionnel de (nom_bouton, url). Ensuite, dans la vue, vous passez ce tableau à un plugin qui génère le menu HTML basé sur ce tableau.

+0

ou une aide puisque les plugins sont obsolètes;) – AlienWebguy