2013-09-22 1 views
1

В Google PageSpeed ​​сообщается, что есть некоторые блокирующие Javascript, необходимые для async. Из this article я знал, что я должен поместить атрибут асинхронной в моем сценарии тег:CahePHP добавляет async к тегу скрипта

<script async src="http://third-party.com/resource.js"></script> 

В CakePHP, я не в состоянии этого добиться именно, я просто в состоянии получить:

<script async="async" src="http://third-party.com/resource.js"></script> 

Использование метод сценария HTML, как следующим образом:

$html->script(array('jsfile1', 'jsfile2'), array('async' => 'async')); 

Я попытался array('async'), но он печатает 0 = «0» в тэгом

Как я могу сделать печать только async в теге скрипта. Кроме того, как я могу сделать его доступным в теге link css тоже?

Примечание: Я использую CakePHP 1.3x

+0

Я ищу это в CakePHP 2.0 – Gunaseelan

ответ

5

Checking the source code указывает на то, что нет никакого способа, чтобы реализовать такой тег, как это очевидно, что формат атрибутов %s="%s".

Если вы действительно нуждаетесь в этом, я думаю, что самый простой способ в настоящее время является предоставить свой собственный настроенное HtmlHelper за счет расширения ядра HtmlHelper и перезаписать _formatAttribute функцию:

Примечание: это для CakePHP 1.3.x только и это довольно грязно, поскольку он не может указать className в массиве помощников. CakePHP 2.x обеспечивает более чистый способ, чтобы перезаписать основной помощник по умолчанию с легкостью, но это не то, что ОП хочет, чтобы я не надену его здесь

  1. Создать app/views/helpers/custom_html.php:

    <?php 
    App::import('Helper', 'Html'); 
    class CustomHtmlHelper extends HtmlHelper { 
        function __formatAttribute($key, $value, $escape = true) { 
         if (in_array($key, array('async', 'defer'))) { 
          return $key; 
         } 
         return parent::__formatAttribute($key, $value, $escape); 
        } 
    } 
    
  2. В вашем app_controller.php или какой-либо основной контроллер, который нужно это, используйте CustomHtmlHelper по:

    var $helpers = array('CustomHtml'); 
    
  3. И, на ваш взгляд, теперь вы можете начать использовать тег async или defer. Не стесняйтесь расширять этот массив, если хотите.

    echo $this->CustomHtml->script('test', array('async' => 'async')); 
    
+0

Спасибо большое, она открывает новые области для меня. – SaidbakR

+0

@ Lionel Chan. Спасибо за Ваш ответ. Как добавить async и отложить параметры для скрипта в cakephp 2.x? Вы сказали, что у cakephp 2.x есть более чистый способ. Вы можете объяснить? – Gunaseelan

+0

@ Gunaseelan, к сожалению, нет простого способа сделать это тоже. Вам нужно будет сделать аналогичные перезаписи в HtmlHelper. То, что я имел в виду тогда, состоит в том, что вы можете указать «className» в массиве '$ helpers' контроллера, так что вы по-прежнему можете использовать' $ this-> Html-> script' в своем представлении с помощью «улучшений», которые вы ставите в пользовательский класс. Проверьте конфигурацию здесь: http://book.cakephp.org/2.0/ru/views/helpers.html#using-and-configuring-helpers (search 'className') –

 Смежные вопросы

  • Нет связанных вопросов^_^