Элементы CakePHP - как поставить javascript? - PullRequest
1 голос
/ 22 августа 2011

Я только начал использовать элементы cakephp, и они потрясающие (раньше я использовал include).

У меня есть галерея элементов и элемент с именем comments (для определенной страницы), и для них у меня есть некоторый код javascript, прикрепленный к ним обоим. Есть ли у вас какие-либо предложения о том, как я мог бы включить этот код JavaScript в элемент? Если я просто добавлю его так, он загрузит javascript перед загрузкой html после элемента, и я не думаю, что это очень разумно.

Ответы [ 3 ]

6 голосов
/ 22 августа 2011

Вы можете поместить код Javascript непосредственно в файл элемента или поместить код Javascript в папку webroot, <cake directory>/app/webroot/js/ и включить файл в макет с помощью помощника HTML:

 echo $html->script("myCode");

Если вы беспокоитесь о коде Javascript, выполняемом до полной загрузки страницы, то используйте window.onload или $ (document) .ready () , если вы используете JQuery.

3 голосов
/ 23 августа 2011

Если я вас правильно понимаю, вы хотите, чтобы JS был специфичен для загрузки страницы в заголовке при вызове определенного элемента, но чтобы JS мог отличаться для каждого элемента. Вы также хотите, чтобы на JS ссылались в начале вашего HTML-документа.

Это на самом деле довольно легко сделать. Просто убедитесь, что у вас есть <?php echo $scripts_for_layout; ?> в вашем теге <head> в используемом макете.

Затем внутри элемента просто выполните:

<?php $this->Html->script("js_file", array("inline"=>false)); ?>

js_file - это имя вашего файла JavaScript в app / webroot / js /. В этом случае файл будет называться js_file.js, но вы должны не указывать .js при ссылке на него, как указано выше.

Неважно, где вы находитесь в файле элемента, потому что часть "inline"=>false гарантирует, что он фактически не появится на этом этапе в коде. Вместо этого он будет отображаться в <head> везде, где вы положили <?php echo $scripts_for_layout; ?> в макете.

2 голосов
/ 04 сентября 2015

В cakephp 3 вместо array('inline' => false) вы должны использовать array('block' => true), если кто-то ищет такой ответ, как я.

...