@ms2345

Как подключать нужные мне виды автоматически?

Доброго времени.
Процедура подключения видов в контроллере сейчас выглядит так:

$this->load->view("document_top"); //Тут doctype и начала контейнера html
$this->load->view("document_head"); //Тут контейнер head и начало тега body
$this->load->view("users");
$this->load->view("document_bottom"); //Тут конец контейнеров body и html


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

Пробовал изменить родительский CI_Controller (файл: /system/core/contaller.php), а именно подключать вида "document_top" в "__construct", а вид "document_bottom" в "__destruct". Однако, ничего не выходит при подключении в "__destruct". Появляется ошибка:


Warning: include(application/errors/error_php.php) [function.include]: failed to open stream: No such file or directory in Z:\OpenServer\domains\local.net\system\core\Exceptions.php on line 183

Warning: include(application/errors/error_php.php) [function.include]: failed to open stream: No such file or directory in Z:\OpenServer\domains\local.net\system\core\Exceptions.php on line 183

Warning: include() [function.include]: Failed opening 'application/errors/error_php.php' for inclusion (include_path='.;z:/openserver/modules/php/PHP-5.3;z:/openserver/modules/php/PHP-5.3/PEAR/pear') in Z:\OpenServer\domains\local.net\system\core\Exceptions.php on line 183


Однако если подключение в "__destruct" заменить на вывод:
echo "</body></html>";

То всё работает как нужно. Однако, мне нужно именно подключать файл.
  • Вопрос задан
  • 276 просмотров
Пригласить эксперта
Ответы на вопрос 1
dmitriylanets
@dmitriylanets
веб-разработчик
ни в коем случае нельзя править напрямую классы фраймворка, создайте базовый класс MY_Controller.php в нем подключайте нужные вьюхи, как вариант создайте метод в MY_Controller
protected function renderPage($page,$data = []) {
$html = $this->load->view("document_top",[],true); 
$html .=$this->load->view("document_head",[],true); 
$html .= $this->load->view($page,$data,true);
$html .= $this->load->view("document_bottom",[],true); 
$this->output->set_output( $html );
}

далее свои контролеры используй так:
class User extends MY_Controller {
public function Index(){
$userlist = [];
// logic
$this->renderPage('users',[
'userlist' => $userlist
]);
}
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы