Это невозможно в PHP - как вы сказали, вы можете получить текущий обработчик ошибок при вызове set_error_handler и восстановить его с помощью restore_error_handler
В отличие от других фреймворков CodeIgniter не имеет глобальной системы шаблонов. Каждый контроллер управляет своим собственным выводом независимо от системы, и представления являются FIFO, если не указано иное.
Например, если у нас есть глобальный заголовок:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd" >
<html>
<head>
<title><?=$title?></title>
<!-- Javascript -->
<?=$javascript ?>
<!-- Stylesheets -->
<?=$css ?>
</head>
<body>
<div id="header">
<!-- Logos, menus, etc... -->
</div>
<div id="content">
и глобальный нижний колонтитул:
</div>
<div id="footer">
<!-- Copyright, sitemap, links, etc... -->
</div>
</body>
</html>
, то наш контроллер должен выглядеть как
<?php
class Welcome extends Controller {
function index() {
$data['title'] = 'My title';
// Javascript, CSS, etc...
$this->load->view('header', $data);
$data = array();
// Content view data
$this->load->view('my_content_view', $data);
$data = array();
// Copyright, sitemap, links, etc...
$this->load->view('footer', $data);
}
}
Существуют и другие комбинации, но лучшие решения существуют через пользовательские библиотеки, например:
См. Комментарии ниже
Шаблон Codeigniter обычно представляет собой просто файл PHP. Вы можете использовать весь обычный синтаксис PHP для вывода переменных, выполнения циклов и вызова другого кода PHP.
Пример контроллера:
<?php
class Blog extends Controller {
function index()
{
$data['title'] = "My Real Title";
$data['heading'] = "My Real Heading";
$this->load->view('blogview', $data);
}
}
?>
Пример представления:
<html>
<head>
<title><?php echo $title;?></title>
</head>
<body>
<h1><?php echo $heading;?></h1>
</body>
</html>
Подробнее читайте в документации здесь: Руководство пользователя CodeIgniter: Просмотры
Я использую CodeIgniter с Smarty, и это здорово (если вам нравится Smarty, я люблю).
Скажите у вас есть контроллер статьи, вы можете сделать в нем что-нибудь вроде этого:
class Article extends Controller {
function show_all() {
$articles = $this->article_model->get_all();
$this->smarty->assign('entities', $articles);
$this->smarty->view('list');
}
}
А затем в вашем шаблоне:
{include file="header.tpl"}
<ul>
{foreach from=$entities item=entity}
<li>{$entity.title}</li>
{/foreach}
</ul>
{include file="footer.tpl"}
Хорошая часть этого состоит в том, что контроллеру действительно не нужно знать о верхних и нижних колонтитулах. Он просто знает, что группа статей должна отображаться в виде списка. Оттуда это просто шаблоны, которые отвечают за определение того, как отображается список вещей, в данном случае в ul между верхним и нижним колонтитулами.
Еще одна интересная вещь, которую вы можете сделать, - это использовать этот шаблон списка для вещей, которые не статьи. У вас может быть список пользователей или страниц или что-то еще. В некоторых случаях может оказаться полезным повторное использование такого шаблона. Не всегда, но иногда.
Настроить CodeIgniter для умных пользователей довольно просто. Дело в том, чтобы скопировать файлы Smarty в папку вашей библиотеки и создать для нее простую оболочку. Вы можете найти инструкции здесь:
http://devcha.blogspot.com/2007/12/smarty-as-template-engine-in-code.html
Как только вы настроите, все отлично.
Я предвзято отношусь к этой библиотеке шаблонов, созданной Кармело Капинпином, потому что она очень проста в использовании: текст ссылки . Просто скопируйте файл в свою библиотеку, и все готово. Инструкции по его использованию приведены в предоставленной мной ссылке.
Эта библиотека , проста в использовании и настройке, делает именно то, что вы ожидаете: