2011-07-07 44 views
1

我正在研究一個PHP/codeigniter項目,我正在考慮創建一個控制器來專門處理返回定製的CSS & JavaScript文件。使用控制器來處理返回與Codeigniter的定製CSS和JavaScript文件

在以前的項目中,我在我的視圖文件的標題中包含了外部CSS & JS文件,但它們基本上必須是靜態的,因爲它們只是作爲服務器的常規資源發送。對於我的下一個項目,我正考慮使用控制器,並基本上製作由控制器加載的CSS/Javascript文件「視圖」。

你們認爲什麼?這是一個好方法嗎?有沒有一個普遍接受的更好的方法來做到這一點?

回答

1

通過使用控制器爲您的JS/CSS,你有裝一噸的不必要的東西對每個請求的開銷爲文件。安全級別,輸入級別,路由器,例外等。

對於什麼應該是靜態內容,您不需要任何此。您不希望這些文件是動態的(按請求更改),因爲這會影響瀏覽器緩存。文件將以加載狀態緩存,否則您將失去瀏覽器緩存的好處。

最好的辦法是合併文件,儘量減少它們,然後將內容寫入靜態文件,但它們不是動態的。但是,他們可能不應該。

你可以做的另一件事是使用一個php文件來組合靜態文件並在你的<link>標記(screen.php)中引用它。簡單的CSS例子:

<?php 
header('Content-type: text/css'); 
$files = array(
    'css/reset.css', 
    'css/screen.css', 
    'css/typography.css', 
); 
foreach ($files as $file) 
{ 
    readfile($file); 
} 

無論哪種方式,你應該更新的文件名,或許還有一個查詢字符串,以避免被服務的舊的緩存文件。例如:/screen.css?version=2

我確實使用$this->load->view()有時用於動態js,但僅用於內聯腳本標記(例如動態所見即所得配置)。這允許您將變量傳遞給「查看」文件以及避免緩存問題。

我的觀點是,它不值得引發CI和所有相關的依賴關係,只是爲了使應該是是靜態內容。

+0

關於額外開銷的好處。我真的想用這種情況下,如JavaScript文件與我想在頁面加載分配一定的變量。但我不認爲這是值得的額外開銷,我認爲我會遇到很多瀏覽器緩存我的文件的問題。 –

+1

如果您只需要一些動態的js變量,那麼在加載其他js之前,爲什麼不在''中將它們分配在嵌入的'

1

我不知道是否有一個「官方」的做法,我通常將頁面分成不同的視圖,其中一個是頁面頭。 如果你這樣做

class mycontroller extends CI_Controller { 

function index() 
{ 
    $data['css'] = 'style1.css'; 
    $data['js'] = 'custom.js'; 
    $this->load->view('head',$data); 
    $this->load->view('body'); 
    $this->load->view('foot') // where I close the </html> tag, for example 
} 

} 

您可以傳遞任何值,在您的視圖,只是加載哪些是由控制器通過

<!DOCTYPE> 
<html> 
<head> 
<?php echo link_tag(base_url().'css/'.$css);?> 
<script type="text/css" src="<?php echo base_url();?>js/<?php echo $js;?>"></script> 
</head> 
+0

我其實已經這樣做了。我期望克服的問題是,您在標題中鏈接到的任何外部樣式表或JavaScript文件都無法針對不同情況進行自定義,例如 –

1

東西我以前是我做標準的「常用」css/js文件列表,然後每個控制器可以包含它們自己特定的一個。在控制器中,我爲js/css設置了一個「includes」數組,然後標題視圖檢查這個數組並對它進行分解。這樣,所有需要的js/css文件都在head標籤中指定。從控制器

例子:

$data['includes']['js'] = array('<script type="text/javascript" src="' . base_url() . 'assets/js/script.js"></script>'); 

從視圖實例:

if(isset($includes['js'])) echo implode("\n", $includes['js']) . "\n"; 
相關問題