2011-07-07 4 views
1

私はPHP/codeigniterプロジェクトに取り組んでおり、カスタマイズされたcss & javascriptファイルを返すようなコントローラを作成することを考えています。コントローラを使用してcodeigniterでカスタマイズされたCSSとjavascriptファイルを返すのを処理する

以前のプロジェクトでは、外部ファイル&のJSファイルをビューファイルのヘッダーに含めましたが、サーバーによって通常のアセットとして送信されたばかりなので、静的でなければなりませんでした。私の次のプロジェクトでは、コントローラーを使用して、コントローラーによってロードされるCSS/Javascriptファイルの「ビュー」を作成することを考えています。

あなたはどう思いますか?これは良いアプローチですか?これを行う一般的に受け入れられたより良い方法はありますか?

答えて

1

あなたのjs/cssのためのコントローラを使用することにより、あなたはすべての要求のために不必要なもののトンをロードするオーバーヘッドを持っていますファイルのために。セキュリティクラス、入力クラス、ルータ、例外など

は静的コンテンツにする必要はありません。ブラウザのキャッシュに影響するため、ファイルを動的にする(リクエストごとに変更する)必要はありません。ファイルがロードされた状態でキャッシュされるか、ブラウザキャッシュの利点が失われます。

ファイルを結合して最小化し、静的ファイルに書き込むことが最良の方法ですが、動的ではありません。しかし、彼らはおそらくそうすべきではありません。

もう1つのことは、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

動的なjsではなく、インラインスクリプトタグ(動的なWYSIWYG設定など)の場合に限り、$this->load->view()を使用します。これにより、 "view"ファイルに変数を渡したり、キャッシュの問題を避けることができます。

私の見解では、の静的コンテンツにする必要があるだけで、CIや関連する依存関係を起動する価値はありません。

+0

超過オーバーヘッドについての良い点。私は実際には、ページロード時に割り当てたい特定の変数を持つjavascriptファイルのような状況でこれを使用したいと思っています。しかし、それはすべてのオーバーヘッドオーバーヘッドの価値があるとは思わないし、私はブラウザの私のファイルをキャッシュすることで多くの問題に遭遇すると思います。 –

+1

いくつかの動的js変数が必要な場合は、他のjsをロードする前に、 ''のインライン '

1

「公式な」方法があるかどうかわかりませんが、通常はページを別のビューに分割します。その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"; 
関連する問題