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);
К сожалению, я просто не могу заставить это работать. У кого-нибудь есть какие-либо способы обойти это или исправления, которые я могу применить? Я пробовал ставить "s" и "s вокруг $view в template.php но это не имеет значения. Обычная ошибка - "Неопределенная переменная: данные" или "Не удается загрузить представление: $view.php "и т.д.
Спасибо, ребята!
Джек
2 answers
Я верю, что у вас есть:
$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['просмотр'].
Здесь довольно много предложений 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.