CakePHP 2 $ this-> Html->脚本顺序

472*_*084 5 php cakephp cakephp-2.1

我试图将JS文件插入到视图中,但它们以错误的顺序插入.

在我的default.ctp中,我有这个

$this->Html->script(array(
    'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js',
    'global'
), array('inline'=>false));

echo $this->fetch('script');
Run Code Online (Sandbox Code Playgroud)

在我看来,我有这个:

$this->Html->script('jquery.fancybox.pack', array('inline' => false));
Run Code Online (Sandbox Code Playgroud)

但当我查看源代码时,它会像这样出现:

<script type="text/javascript" src="/js/jquery.fancybox.pack.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript" src="/js/global.js">
Run Code Online (Sandbox Code Playgroud)

这显然是错误的顺序,所以jQuery插件不起作用.

我究竟做错了什么?

jer*_*ris 6

通常,我在布局中回显所需的脚本(而不是将它们添加到缓冲区),然后在脚本块(缓冲脚本)之后.这可确保首先回显每个视图所需的脚本.你的default.ctp看起来像这样:

// get echoed immediately
echo $this->Html->script(array(
    'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js',
    'global'
));
// everything else from the view, echoed after
echo $this->fetch('script');
Run Code Online (Sandbox Code Playgroud)

或者,您可以为前面的脚本指定特殊块.

echo $this->Html->script(array(
    'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js',
    'global'
), array('block' => 'firstScripts');
echo $this->fetch('css');
echo $this->fetch('firstScripts');
echo $this->fetch('script');
Run Code Online (Sandbox Code Playgroud)