Прежде всего
$this->load->view('filename');
Может использоваться столько раз, сколько вы хотите в одной и той же функции контроллера, и они будут отображаться в правильном порядке.
То, что вы сделали, является отдельнымв частях контроллеров, которые должны использоваться в одном контроллере.Я полагаю, у вас есть эти файлы в таких файлах, как
/application/controllers/static_page.php
/application/controllers/user.php
/application/controllers/system.php
И без масштабной модификации CodeIgniter вы не можете вызвать контроллер с другого контроллера, что вас останавливало.Если вам нужно использовать один и тот же код обработки для многих функций, вы должны создать либо helper , который вы можете использовать где угодно, либо более элегантное решение, имеющее общие функции контроллера в / library / MY_Controller.php.
MY_Controller.php будет вызываться всегда до вызова контроллера
<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
class MY_Controller extends CI_Controller
{
function __construct()
{
parent::__construct();
// you can do any kind of processing here
// in example if you have some view counter
// this place is always called
}
function a_generic_function($rawdata)
{
// do some processing here
return $data;
}
}
Тогда вы сможете использовать эту функцию в любом из ваших контроллеров:
$this->a_generic_function($rawdata);
Теперь самый умный способ справиться с верхним и нижним колонтитулом - создать файл «макета», содержащий как верхний, так и нижний колонтитулы.
Вот пример представления layout.php:
<!doctype html>
<head>
<meta charset="utf-8">
<title><?php echo $title; ?></title>
</head>
<body>
<div id="container">
<header>This page has been made by <?php echo $user_name; ?>/header>
<div id="main" role="main">
<?php echo $main_content_view; ?>
</div>
<footer>Write your footer here</footer>
</div>
</body>
</html>
Вы видите, что в середине $ main_content_view.
С этим вы будете делать в своем контроллере:
// add the HTML for the login to the variable
// TRUE means we don't output it in the browser, but put it in a String
$this->viewdata["main_content_view"] = $this->load->view('login', $data, TRUE);
// want to add more data? just ADD it to the variable, like a String
$this->viewdata["main_content_view"] += $this->load->view('main', $data, TRUE);
// done? send it to the layout, and pass it the $this->viewdata
$this->load->view('layout', $this->viewdata);
Что еще вы можете сделать с этим?Вы можете использовать $ this-> viewdata, например:
$this->viewdata["title"] = 'Function title';
$this->viewdata["user_name"] = $user_name;
, чтобы вы могли редактировать макет столько раз, сколько хотите, как и любой другой вид.