На самом деле, после тщательного изучения этого вопроса, я пришел к выводу, что наилучшей практикой для включения верхних и нижних колонтитулов в MVC является третий вариант, а именно расширение базового контроллера. Это даст вам немного больше гибкости по сравнению с предложением htxt, особенно если вы создаете очень модульный макет (не только верхний и нижний колонтитулы, а также боковые панели, нестатические меню и т. Д.).
Сначала определите класс Base_controller, в котором вы создаете методы, которые добавляют элементы вашей страницы (верхний и нижний колонтитулы и т. Д.) К выходной строке:
class Base_controller extends Controller
{
var $_output = '';
function _standard_header($data=null)
{
if (empty($data))
$data = ...; // set default data for standard header here
$this->_output .= $this->load->view('header', $data, true);
}
function _admin_header($data=null)
{
if (empty($data))
$data = ...; // set default data for expanded header here
$this->_output .= $this->load->view('admin_header', $data, true);
}
function _standard_page($data)
{
$this->_standard_header();
$this->_output .=
$this->load->view('standard_content', $data, true);
echo $this->_output; // note: place the echo statement in a
// separate function for added flexibility
}
function _page_with_admin_header($data)
{
$this->_admin_header($data);
$this->_output .=
$this->load->view('standard_content', $data, true);
echo $this->_output;
}
}
Затем в контроллерах вашей страницы просто расширьте базовый класс и вызовите свои функции для построения страницы.
class Page_controller extends Base_controller
{
function index()
{
$data = ...; // Set content data here
$this->_standard_page($data);
}
function admin()
{
$data = ...; // Set content and header data here
$this->_page_with_admin_header($data);
}
}
Используя базовый контроллер, вы можете добиться очень чистого кода в ваших отдельных контроллерах страницы и иметь отдельные представления для элементов на странице (что позволяет повторно использовать код как в представлениях, так и в контроллерах). Все, что вам нужно сделать, это определить общие разделы страницы (то, что вы могли бы назвать «фрагментами») как функции вашего базового контроллера.
И если базовый контроллер должен начать бесконтрольно расти (что может происходить на больших сайтах), вы можете изменить некоторые из его менее общих функций, поместив их в подклассы, и позволить соответствующим контроллерам страниц расширять их вместо оригинальных базовый контроллер.
Наслаждайтесь!
/ Дженс Роланд