CakePHP 2 $ this-> Html-> заказ скрипта - PullRequest
5 голосов
/ 28 марта 2012

Я пытаюсь вставить файлы 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');

На мой взгляд, яесть это:

$this->Html->script('jquery.fancybox.pack', array('inline' => false));

Но когда я просматриваю источник, он выглядит так:

<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">

Что, очевидно, является неправильным порядком, поэтому плагин jQuery не работает.

Что я делаю не так?

Ответы [ 3 ]

6 голосов
/ 28 марта 2012

Обычно я выписываю необходимые сценарии в макете (вместо добавления их в буфер), а затем блокирую сценарии (буферизованные сценарии). Это гарантирует, что сценарии, необходимые для каждого представления, будут отображаться первыми. Ваш 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');

Или вы можете указать специальный блок для своих предыдущих сценариев.

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');
2 голосов
/ 28 марта 2012

Не уверен, сколько времени вы потратили на построение вашей текущей системы, но вы можете попробовать использовать иерархический загрузчик ресурсов помощник, вместо стандартного помощника cakePHP.

Стандартный загрузчик ресурсов, к сожалению, не может справиться с зависимостями между различными файлами и просто загружает их в порядке их предоставления (представление анализируется перед компоновкой).

0 голосов
/ 29 апреля 2015

Используйте это в головной части.

Html->script('jquery-1.11.1.js') ?>
fetch('script') ?>
...