Включение JS в представление по умолчанию в Cake PHP - PullRequest
0 голосов
/ 25 ноября 2011

Я могу сделать это в любом из моих файлов View в Cake PHP:

<?php echo $this->Html->script('myjs.js', false); ?>

но если я делаю то же самое в моем представлении по умолчанию (default.ctp), то файлы JS не загружаются, т.е. они не отображаются. Я попытался переместить включения выше и ниже <?php echo $scripts_for_layout ?> в представлении по умолчанию, но они по-прежнему не выводятся:

<?php echo $scripts_for_layout ?>  
<?php echo $this->Html->script('myjs.js'); ?>

<?php echo $this->Html->script('myjs.js'); ?>
<?php echo $scripts_for_layout ?>  

Есть идеи?

Спасибо :).

Ответы [ 4 ]

3 голосов
/ 25 ноября 2011

с расширением или без него - это не причина, по которой скрипт не отображается,

как mensch , упомянутых ранее, не имеет значения из-за:

источник HTML-помощника CakePHP 2

if (strpos($url, '?') === false && substr($url, -3) !== '.js') {
  $url .= '.js';
}

причина: вы уже вставили этот скрипт в ваше представление,

торт проверяет, вставлен ли скрипт на страницу

options - 'Once' - Должен ли скрипт проверяться на уникальность. Если истинные сценарии будут включены только один раз, используйте false, чтобы разрешить один и тот же сценарий должен быть включен более одного раза в запрос.

по умолчанию значение один раз установлено в TRUE

сначала удалите скрипт из вашего представления, а затем попробуйте его с или без '.js'

P.S .: почему ответ petervaz сработал для вас: потому что эта проверка:

if ($options['once'] && isset($this->__includedScripts[$url])) {
    return null;
}

сделано перед проверкой расширения файла

так isset(__includedScripts['myjs']) == false // because first key was __includedScripts['myjs.js']

и ваш сценарий включен

1 голос
/ 12 декабря 2012

Еще одна вещь, которую я определенно рекомендую, это проверить, что загрузка вашего JS в представлении на все 100% нормально.

НЕ используйте скрипт $ this-> Html->, если вы не уверены:

--- зависимость скриптов друг от друга

--- зависимость некоторых плагинов от других скриптов

--- сколько разных макетов и / или представленийвы хотите использовать в будущем.

Например, некоторые плагины используют jQuery, но они требуют загрузки jQuery ПЕРЕД самим плагином.

Так что если вы поместите jQuery в представление или макет,JS плагина загружается раньше, чем jQuery, и плагин может не работать.Если вы хотите убедиться, что какой-то скрипт загружается первым, попробуйте следующее:

в вашем приложении / View / Helper / AppHelper.php:

class AppHelper extends Helper {
    public $helpers = array('Html', 'Session');

    public function beforeRender($viewFile){
            echo $this->Html->script('jquery', array('inline'=>false));
        }
}

Поэтому вам не нужновключите jQuery в несколько представлений, и он загружается первым.

1 голос
/ 25 ноября 2011

У меня есть проект со скриптами, добавленными непосредственно перед $ scripts_for_layout, и они отображаются нормально.Разница лишь в том, что я не добавляю расширение .js к вызову, например:

default.ctp:

<head>
    <?php echo $this->Html->charset(); ?>
    <title>
        <?php echo "Site > $title_for_layout"; ?>
    </title>
<?php    
  echo $this->Html->script('jquery-1.6.4');
  echo $this->Html->script('jquery-ui-1.8.16.custom.min');
  echo $this->Html->script('mercado');
  echo $scripts_for_layout;
?>
</head>
0 голосов
/ 25 ноября 2011

$scripts_for_layout в макете является заполнителем для всех сценариев, включенных в представления, поэтому, если вы включите его или не будете иметь никакого эффекта, если вы загрузите сценарии непосредственно в default.ctp.

При этом добавление расширения или исключение его из вызова $this->Html->script() не должно иметь значения. Может случиться так, что HtmlHelper не вызывается правильно (он вызывается по умолчанию в Cake 2.0), но вы должны получать сообщения об ошибках. Отладка установлена ​​в 2 в /app/Config/core.php?

...