2

私は最初のコード イグナイター プロジェクトに取り組んでいます。ドキュメントの準備ができている何かのインスタンスを開始するために記述する必要がある JavaScript がいくつかあります。それは一度限りであり、二度と呼び出されることはありません。頭に含める必要がありますが、体の最後にこれを行う必要がある場合があります。たとえば、私がこれを持っているとしましょう:

<script>
alert('this is a one off alert');
</script>

このようなことをする際のベストプラクティスは何ですか? これをコントローラーに入れることは容認できる慣行ですか? それにはモデルの書き込みが必要ですか?それとも、スクリプトごとに個別のビューを作成して MVC に含める必要がありますか?

ありがとう。

4

2 に答える 2

1

JS は HTML の一部であるため、コントローラーやモデルに含めるべきではありません。フレームワークを使用しているため、ビューに表示する必要があります。別のファイルに保存する必要があります。コントローラーのメソッドごとに別のファイルを保持するか、コントローラーごとに 1 つの JS ファイル。

また、コア フォルダーに base_controller を作成し、それを使用してすべてのコントローラーを拡張することもできます。そこで、すべてのデフォルトの JS および CSS を設定できます。したがって、コントローラーのインデックスメソッドを呼び出すと、デフォルトのJSとCSSが読み込まれ、新しいものを追加する必要がある場合は、ジョンBが言ったようにコントローラーから渡すだけです

ヘルパーファイルにこの関数を含めることができます

/**
 * getting js files from public folder
 * @param array $js
 * @return string
 */
function js_tag($js) {
    $out = "";
    if (!empty($js)) {
        $js = array_reverse($js);
        foreach ($js as $j) {
            if (strstr($j, "http:") == "" && strstr($j, "https:") == "") {
                if ($j == 'tinymac') {
                    $out.='<script type="text/javascript" src="' . base_url() . 'jscripts/tiny_mce/tiny_mce.js"></script>' . "\n";
                } else {
                    $out.='<script type="text/javascript" src="' . base_url() . 'public/js/' . $j . '"></script>' . "\n";
                }
            } else {
                $out.='<script type="text/javascript" src="' . $j . '"></script>' . "\n";
            }
        }
    }
    $out .= '<script type="text/javascript"> var baseurl = "' . base_url() . '"</script>' . "\n";
    return $out;
}

/**
 * getting css files from public folder
 * @author Amir M
 * @param array $css
 * @return string
 */
function css_tag($css) {
    $out = "";
    if (!empty($css)) {
        $css = array_reverse($css);
        foreach ($css as $c) {
            if (strstr($c, "http:") == "" && strstr($c, "https:") == "") {
                $out.= link_tag(base_url() . "public/css/" . $c) . "\n";
            } else {
                $out.= link_tag($c) . "\n";
            }
        }
    }
    return $out;
}

コントローラーから呼び出すことができます

public function index(){
  $data['js'] = js_tag('one.js', 'two.js' , 'jquery.js');
  $data['css'] = css_tag('one.css', 'two.css' , 'jquery-ui.css');
$thuis->load->view('index' , $data);
}

注:上記の方法は配列を逆にするため、配列の最後の値がページの最初に来るため、配列の最後にjQueryを保持します

すべてのウェブサイトで共通のヘッダーに

<?php echo $js.$css?>
于 2013-03-18T18:22:05.253 に答える
1

一般的に私が使用する練習はこれです:

  1. すべてのビュー ファイルは、共通のヘッダーをロードします。ビューファイルはコントローラの最後にロードされます。

  2. コントローラーから開始するスクリプトのリンクをハードコードするか渡すことができます。スクリプトタグのハードコーディングは自明です。もう少し動的に実行したい場合は、スクリプト ソースの配列を設定し、それらをヘッダーでループするだけです。

だからコントローラーで

$data['scripts'] = array();
$data['scripts'][] = 'http://yoursourcehere';

または自己ホスティングの場合:

$data['scripts'][] = site_url('assets/js/yourscript.js');

それからビュー

if(isset($scripts))
{
   foreach($scripts as $script)
   {
      echo '<script type="text/javascript" src="'.$script.'"></script>';
   }    
}

したがって、基本的には、すべてのカスタム スクリプトを別のファイルに入れて、この方法でロードすることができます。一般的な方法ですべてのスクリプトを一度にロードできるため、実用的です。

于 2013-03-18T17:30:41.763 に答える