2010-04-11 4 views
4

В основном для моего webapp я пытаюсь организовать его немного лучше. Как на данный момент, каждый раз, когда я хочу, чтобы загрузить страницу, я должен сделать это от моего контроллера так:CodeIgniter/PHP - вызов вида из вида

 $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'); 

Как вы можете сказать, что это на самом деле не очень эффективным.

Так что я думал, что создаю представление «хозяин» - оно называется template.php. Это содержание зрения шаблона:

<?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'); 
?> 

И тогда я подумал, что я смогу назвать его из контроллера, как это:

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

К сожалению, я просто не могу сделать эту работу. Есть ли у кого-нибудь какие-либо способы этого или исправления, которые я могу создать? Я пробовал ставить «и» около $ view в template.php, но это не имеет никакого значения. Обычная ошибка: «Неопределенная переменная: данные» или «Невозможно загрузить представление: $ view.php» и т. Д.

Спасибо, ребята!

Джек

ответ

13

Я считаю, где у вас есть:

$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'); 

Вам нужно просто избавиться от линии:

$view = $data['view']; 

Это происходит потому, что, когда массив передается от контроллера , переменную в представлении можно получить просто $ view, а не $ data ['view'].

+0

Спасибо, я отдам! Я сообщу через пару минут. – Jack

+0

Большое спасибо, это отлично работает! :) – Jack

+0

Рад это слышать – dd0x

6

Довольно много предложений здесь http://codeigniter.com/forums/viewthread/88335/

Я выбрал этот метод: класса контроллера:

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); 
} 

Вид:

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

загружая вид в представлении и пройти через любые переменные, которые могут использоваться вашим детским представлением, далеки от идеала. Возможно, было бы лучше использовать что-то вроде Action Filters in Laravel.

Смежные вопросы