我遇到了一些问题。 appendFile似乎从视图中不起作用。如果我将其更改为prependFile,它具有相同的行为。
layout.phtml
<!doctype html>
<html lang="en" dir="ltr">
<head>
<?php
$this->headScript()->appendFile('http://code.jquery.com/ui/1.10.3/jquery-ui.js');
$this->headScript()->appendFile('/theme/javascripts/application.js');
$this->headScript()->appendFile('/js/own.js');
?>
</head>
<body>
<?php echo $this->layout()->content; ?>
<?php echo $this->headScript() ?>
</body>
</html>
index.phtml
<?php $this->headScript()->appendFile('/js/another.js') ?>
输出
<!doctype html>
<html lang="en" dir="ltr">
<head>
</head>
<body>
<script type="text/javascript" src="/js/another.js"></script>
<script type="text/javascript" src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<script type="text/javascript" src="/theme/javascripts/application.js"></script>
<script type="text/javascript" src="/js/own.js"></script>
</body>
</html>
你可以看到/js/another.js将成为第一个js。这不是我想要的,我想把它作为最后一个。谁知道什么是错的?
答案 0 :(得分:0)
/js/another.js
位于开头,因为首先调用layout.phtml
,然后当您调用<?php echo $this->layout()->content; ?>
时,它会调用index.phtml
文件。
现在你的代码中有:
<?php echo $this->layout()->content; ?>
<?php echo $this->headScript() ?>
所以它实际上调用了layout()
,因此调用了index.phtml
,然后调用headscript()
来调用其余的js
。它附加了index.phtml
中提到的headscript()
,然后从<!doctype html>
<html lang="en" dir="ltr">
<head>
<?php
$this->headScript()->appendFile('http://code.jquery.com/ui/1.10.3/jquery-ui.js');
$this->headScript()->appendFile('/theme/javascripts/application.js');
$this->headScript()->appendFile('/js/own.js');
?>
</head>
<body>
<?php echo $this->headScript() ?>
<?php echo $this->layout()->content; ?>
</body>
</html>
附加其余内容。尝试相反的方式......
你应该尝试:
<HEAD>
理想情况下,您应该在{{1}}部分输出所有脚本。
答案 1 :(得分:0)
视图脚本在布局之前呈现,因此当您追加/js/another.js
时,没有其他脚本,这就是为什么稍后由布局添加的脚本最终添加到脚本之后
您应该可以通过将布局中的所有appendFile()
调用更改为prependFile()
来实现所需的顺序。 (并且您可能需要撤销他们的订单,因为您现在正在预先处理。)执行顺序应为:
/js/another.js
/js/own.js
/theme/javascripts/application.js
http://code.jquery.com/ui/1.10.3/jquery-ui.js
此外,您可能需要考虑使用内联脚本帮助程序(以相同的方式工作),因为在<body>
中使用头脚本输出脚本可能会使处理代码的未来开发人员感到困惑。