正如肖恩所說,如果功能是在控制器級別,你應該擴展CI_Controller。 可能某些功能應該處於視圖級別,因此可以使用加載程序視圖來幫助您保持每個頁面的全局佈局幷包含常用功能。這是這樣的:
[觀點] layout.php中:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<head>
<?php
$this->load->view('meta', $data);
?>
</head>
<body>
<div id="wrapper">
<?php
$this->load->view('header', $data);
?>
<div id="contents">
<?php include ('menu_izq.php'); ?>
<div id="page">
<?php $this->load->view($page, $data); ?>
<div class="clear"></div>
</div>
</div>
<div style="clear: both;"></div>
<?php $this->load->view('footer');?>
</div>
</body>
</html>
在你的控制器,你應該總是加載這個視圖和參數數組中傳遞內容的真實觀點的價值,就像
$data['page'] = 'incidents'; // this is the real contents
$stylesheets[] = '/scripts/jscalendar-1.0/skins/aqua/theme.css';
$data['stylesheets'] = $stylesheets;
$scripts[] = '/scripts/jscalendar-1.0/calendar.js';
$scripts[] = 'https://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js';
$scripts[] = '/scripts/autoNumeric-1.4.1.js';
$scripts[] = '/scripts/autoLoader.js';
$data['scripts'] = $scripts;
$this->load->view('container',$data);
感謝您的評論。我一直這樣做,但似乎並不正確。我最終將得到一個巨大的New_Controller文件,來自各處的代碼都混在一起,並從其他控制器類繼承。似乎很笨拙。 – noinstance 2011-02-17 16:59:58
@nosuchnick - 沒有規則說你應該只有*一個*這樣的控制器 - 你可以有一個`Base_Controller`包含一些公共代碼,然後是一個`Shopping_Controller`,專門用於購物車的常用功能和數據,以及另一個`Shopping_Specials_Controller`,增加了一些專門的功能......並且所有這些都與`Admin_Controller`(它也從`Base_Controller`繼承)分開 - 所以你只能加載你需要的東西。 – 2011-02-17 17:12:25