Расширяем библиотеку Parser (/system/libraries/Parser.php)Метод construct($folder)Метод
construct() служит для сбора HTML шаблона в случае, когда он разбит по частям (header.
php, main.
php, sidebar.
php, footer.
php и т.д.).
Метод
construct() принимает один параметр:
Структура папок для работы
construct():
/application/views/tpl - директория с разбитым на части шаблоном (по умолчанию)
/application/models - директория, в которой construct() ищет модели (по умолчанию)
Если указан
$folder:
/application/views/
$folder/tpl - директория с разбитым на части шаблоном
/application/models/
$folder - директория, в которой construct() ищет модели
Имена шаблонов и моделей:
Имя модели должно быть "имя части шаблона"_model.
php.
Например для шаблона header.
php construct() будет искать модель header_model.
php.
Метод
get_data() в подключаемых моделях:
Метод должен присутствовать во всех подключаемых моделях шаблонов и возвращать ассоциативный массив.
Основную часть шаблона можно оставить в /application/views/ - это значения не имеет, т.к. к нему подключаются части из /application/views/tpl непосредственно из контроллера.
Код:
public function construct($folder = DIRECTORY_SEPARATOR){
$CI =& get_instance();
$DS = DIRECTORY_SEPARATOR;
$empty['array'] = '';
$path['tpl'] = $folder != $DS ? $DS . $folder . $DS : $DS;
$path['model'] = $folder != $DS ? $folder . '/' : '/';
$path['parser'] = $path['model'] . 'tpl/';
$path['scandir'] = '.' . $DS . 'application' . $DS . 'views' . $path['tpl'] . 'tpl';
$files = scandir($path['scandir']);
unset($files[0]);
unset($files[1]);
foreach ($files as $file){
$name = substr($file, 0, -4);
$model = $name . '_model';
if(file_exists($path['model'])){
$CI->load->model($path['model'] . $model);
$data[$name] = $CI->$model->get_data();
}
$data[$name] = isset($data[$name]) ? $data[$name] : $empty;
$tpl[$name] = $CI->parser->parse($path['parser'] . $file, $data[$name], TRUE);
}
return $tpl;
}
public function construct($folder = DIRECTORY_SEPARATOR){
$CI =& get_instance();
$DS = DIRECTORY_SEPARATOR;
$empty['array'] = '';
$path['tpl'] = $folder != $DS ? $DS . $folder . $DS : $DS;
$path['model'] = $folder != $DS ? $folder . '/' : '/';
$path['parser'] = $path['model'] . 'tpl/';
$path['scandir'] = '.' . $DS . 'application' . $DS . 'views' . $path['tpl'] . 'tpl';
$files = scandir($path['scandir']);
unset($files[0]);
unset($files[1]);
foreach ($files as $file){
$name = substr($file, 0, -4);
$model = $name . '_model';
if(file_exists($path['model'])){
$CI->load->model($path['model'] . $model);
$data[$name] = $CI->$model->get_data();
}
$data[$name] = isset($data[$name]) ? $data[$name] : $empty;
$tpl[$name] = $CI->parser->parse($path['parser'] . $file, $data[$name], TRUE);
}
return $tpl;
}
Пример работы construct()
/application/views/admin/tpl/header.php
<head>
<title>{title}</title>
</head>
/application/views/admin/main_view.php
<html>
{header}
<body>
Контент
{footer}
</body>
</html>
/application/views/admin/tpl/footer.php
<div class="footer"></div>
/application/models/admin/header_model.php
class header_model extends CI_Model{
public function get_data(){
$data['title'] = 'Заголовок';
return $data;
}
}
/application/controllers/admin/main.php
class main extends CI_Controller{
public function index(){
$tpl = $this->parser->construct('admin');
$this->parser->parse('admin/main_view.php', $tpl);
}
}
Исходный код http://sitename/admin/main:
<html>
<head>
<title>Заголовок</title>
</head>
<body>
Контент
<div class="footer">Подвал</div>
</body>
</html>
Просьба обсуждение вести в отдельной теме
_____________
Безвозмездно помогаю только тем, кто сам пытается что-то сделать. Остальным за WMR
Даже если там 10 строк кода!
Даже если мне это ничего не стоит!
Даже если вы нуб!