CodeIgniter / PHP - вызов представления изнутри представления - PullRequest
4 голосов
/ 11 апреля 2010

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

        $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» и т. Д.

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

Jack

Ответы [ 2 ]

13 голосов
/ 11 апреля 2010

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

$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'].

6 голосов
/ 09 июля 2012

Довольно много предложений здесь 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); ?>

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

...