2010-04-11 4 views
4

Fondamentalement pour ma webapp j'essaye de l'organiser un peu mieux. Comme il le moment, chaque fois que je veux charger une page, je dois le faire de mon contrôleur comme ceci:CodeIgniter/PHP - Appeler une vue à partir d'une vue

 $this->load->view('subviews/template/headerview'); 
    $this->load->view('subviews/template/menuview'); 
    $this->load->view('The-View-I-Want-To-Load'); 
    $this->load->view('subviews/template/sidebar'); 
    $this->load->view('subviews/template/footerview'); 

Comme vous pouvez le dire que ce n'est pas vraiment très efficace.

Alors j'ai pensé que je créerais une vue «maître» - Ça s'appelle template.php. Ceci est le contenu de la vue du modèle:

<?php 
    $view = $data['view']; 

     $this->load->view('subviews/template/headerview'); 
     $this->load->view('subviews/template/menuview'); 
     $this->load->view($view); 
     $this->load->view('subviews/template/sidebar'); 
     $this->load->view('subviews/template/footerview'); 
?> 

Et puis je pensais que je serais capable de l'appeler d'un contrôleur comme ceci:

$data['view'] = 'homecontent'; 
    $this->load->view('template',$data); 

Malheureusement, je ne peux pas faire ce travail. Quelqu'un at-il des moyens de contourner cela ou des corrections que je peux mettre en place? J'ai essayé de mettre "" s et "s" autour de $ view dans template.php mais cela ne fait aucune différence. L'erreur habituelle est "Variable indéfinie: données" ou "Impossible de charger la vue: $ view.php" etc.

Merci à tous!

Jack

Répondre

13

Je crois où vous avez:

$view = $data['view']; 

$this->load->view('subviews/template/headerview'); 
$this->load->view('subviews/template/menuview'); 
$this->load->view($view); 
$this->load->view('subviews/template/sidebar'); 
$this->load->view('subviews/template/footerview'); 

Vous devez tout simplement se débarrasser de la ligne:

$view = $data['view']; 

En effet, lorsque le tableau est passé du contrôleur , la variable sur la vue est accessible simplement par $ view plutôt que par $ data ['view'].

+0

Merci, je vais essayer! Je rapporterai dans quelques minutes. – Jack

+0

Merci beaucoup, cela fonctionne parfaitement! :) – Jack

+0

Content de l'entendre – dd0x

6

Tout à fait quelques suggestions ici http://codeigniter.com/forums/viewthread/88335/

j'ai choisi cette méthode: classe contrôleur:

public function __construct() 
{ 
    parent::__construct(); 

    $this->load->vars(array(
     'header' => 'partials/header', 
     'footer' => 'partials/footer', 
    )); 
} 

public function index() 
{  
    $data['page_title'] = 'Page specific title';   
    $this->load->view('my-view', $data); 
} 

Vue:

<?php $this->load->view($header, compact('page_title')); ?> 
... blah blah ... 
<?php $this->load->view($footer); ?> 

avoir à charger la vue dans la vue et passer par Toute variable qui pourrait être utilisée par votre vue enfant est loin d'être idéale. Pouvoir utiliser quelque chose comme Action Filters in Laravel serait probablement mieux.

Questions connexes