我正在尝试为javascript文件创建队列函数。基本上,这是我希望它工作的方式: 我想创建一个函数,它将把所有发送给它的javascripts放到页面上的适当位置(即页眉或页脚,以及上面依赖的脚本)。
我希望能够说: 这是一个脚本。按照它应该的顺序将它添加到队列中。然后,在所有脚本排队后,运行该函数将它们写入页面。 到目前为止,我的代码看起来像这样:
$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()
等到所有脚本在运行之前排队等待?或者....是否有更好的方法来允许脚本队列,以便我可以在最后将所有脚本写入文档?
答案 0 :(得分:0)
如果它们都在同一个文件中运行,你可以将正文内容变成一个变量$ body,然后先加载它,然后将它回显到<body>
部分吗?
答案 1 :(得分: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>";
答案 2 :(得分:0)
尝试使用模板引擎,例如Twig,并且在准备好脚本数组后,您将能够输出html。