2

javascript ファイルのキュー関数を作成しようとしています。基本的に、これは私がそれを機能させたい方法です: 送信されたすべての JavaScript を受け取り、それらをページの適切な場所 (つまり、ヘッダーまたはフッター、および依存スクリプトの上) に配置する関数を作成したいと考えています。

私が言えるようになりたい: これがスクリプトです。あるべき順序でキューに追加します。次に、すべてのスクリプトがキューに入れられたら、関数を実行してスクリプトをページに書き込みます。これまでのところ、私のコードは次のようになります。

$scripts = array();
function enqueue_script($src="", $script_name="", $script_data="", 
 $script_dependencies=array(), $force_header=false, $additional_atts=array()){
    global $scripts;
    //run check for duplicates

    //run check for dependencies already in the variable

    //run checks to see if this script depends on other scripts
    //$scripts array is saved in increments of 10 to allow for up to 
    //9 dependants

    $i = count($scripts);
    $i = ($i*10)+10;
    $scripts[$i]['src'] = $src;
    $scripts[$i]['script_name'] = $script_name;
    $scripts[$i]['script_data'] = $script_data;
    $scripts[$i]['dependencies'] = $script_dependencies;
    $scripts[$i]['force_header'] = $force_header;
    $scripts[$i]['atts'] = $additional_atts;

}
function write_scripts_header() {
    global $scripts;
    $echo = "";
    $atts = "";
    //create script tag for insertion in header
    foreach($scripts as $s){
        if($s['force_header']){
            foreach($s['atts'] as $a => $v){
                $atts .= " {$a}='{$v}'";
            }
            if($s['src']!=""){
                $echo .= "<script src='{$s['src']}'{$atts}></script>\n";
            } else {
                $echo .= "<script{$atts}>{$s['script_data']}</script>\n";
            }
        }
    }
    echo $echo;     
}
function write_scripts_footer() {
    global $scripts;
    $echo = "";
    $atts = "";
    //create script tag for insertion in footer
    foreach($scripts as $s){
         if(!$s['force_header']){
            foreach($s['atts'] as $a => $v){
                $atts .= " {$a}='{$v}'";
            }
            if($s['src']!=""){
                $echo .= "<script src='{$s['src']}'{$atts}></script>\n";
            } else {
                $echo .= "<script{$atts}>{$s['script_data']}</script>\n";
            }
        }
    }
    echo $echo;
}

次に、HTML ファイル部分で:

<html>
<head>
<?php write_scripts_header();?>
</head>
<body>
<?php write_scripts_footer();?>
</body>
</html>

HTML セクションが最後に読み込まれる場合、これは正常に機能します。ただし、body タグの途中でインクルードが発生し、そのインクルードをenqueue_script()ヘッダーに含める必要がある場合、関数の実行$scripts時に変数はまだ準備ができていません。write_scripts_header()

すべてのスクリプトがキューに入れられるまで待ってから実行するwrite_scripts_header()にはどうすればよいですか? write_scripts_footer()または....最後にすべてのスクリプトをドキュメントに書き込むことができるように、スクリプトキューを許可するより良い方法はありますか?

4

3 に答える 3

0

すべてが同じファイルで実行されている場合、本文の内容を変数 $body にして、最初にロードしてから<body>セクションにエコーできますか?

于 2012-04-12T21:39:23.253 に答える
0
change
<html>
<head>
<?php write_scripts_header();?>
</head>
<body>
<?php write_scripts_footer();?>
</body>
</html>

print "<html><head>".write_scripts_header()."</head><body>".write_scripts_footer()."</body></html>";
于 2012-04-12T21:41:18.033 に答える
0

Twigなどのテンプレート エンジンを使用してみてください。scripts-array の準備が完了したら、html を出力できるようになります。

于 2012-04-12T21:42:31.060 に答える