Ich versuche, eine Warteschlangenfunktion für Javascript-Dateien zu erstellen. Im Grunde ist dies die Art, wie ich will, dass es funktioniert: Ich möchte eine Funktion erstellen, die alle an sie gesendeten Javascripts übernimmt und sie an der entsprechenden Stelle auf der Seite ablegt (zB Kopf- oder Fußzeile und darüber abhängige Skripte). . Ich möchte sagen können: Hier ist ein Skript. Fügen Sie es der Warteschlange in der Reihenfolge hinzu, in der es sich befinden soll. Nachdem alle Skripts in die Warteschlange gestellt wurden, führen Sie die Funktion aus, um sie auf die Seite zu schreiben. Bisher sieht mein Code wie folgt aus:Wie eine PHP-Funktion zu machen, warten Sie bis zum Ende des Skripts
$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;
}
Dann wird in der HTML-Datei Teil:
<html>
<head>
<?php write_scripts_header();?>
</head>
<body>
<?php write_scripts_footer();?>
</body>
</html>
Dies funktioniert gut, wenn die HTML-Abschnitt zuletzt geladen. Wenn ich jedoch ein Include, das in der Mitte des body-Tags passiert, und die benötigen, um enqueue_script()
in der Kopfzeile, dann die $scripts
Variable ist noch nicht fertig, wenn die write_scripts_header()
Funktion ausgeführt wird.
Wie kann ich write_scripts_header()
und write_scripts_footer()
warten, bis alle Skripte in die Warteschlange gestellt wurden, bevor sie ausgeführt werden? Oder .... gibt es einen besseren Weg, um eine Skript-Warteschlange zu ermöglichen, so dass ich am Ende alle Skripte in das Dokument schreiben kann?