2015-03-30 2 views
1

Я использую Joomla! 3,4Joomla асинхронный скрипт загрузка jdoc head

<jdoc:include type="head"> вызывает head.php файл в /libraries/joomla/document/html/renderer/, где ссылка на $strAttr['async'] можно найти в части для создания файла сценария ссылки.

$strAttr - это всего лишь массив, называемый контуром foreach, но это происходит от $document->_scripts.

Я хочу загрузить мои скрипты асинхронно, как я могу изменить атрибут $strAttr['async'] для каждого файла сценария? Я знаю, что я могу просто изменить код в head.php, но я думаю, что я пропускаю некоторые настройки в Joomla.

+0

Эй, там. Я с самого начала немного изменил ваш вопрос в контексте контекста и слегка улучшил форматирование кода. Не стесняйтесь что-то смело, я не был уверен, где синхронная часть попадет в вопрос. Удачи с вашим вопросом! Вы можете добавить здесь часть средства визуализации, которая генерирует ссылки на файл сценария, чтобы помочь читателям помочь вам. –

ответ

1

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

В этой функции вам нужно что-то вроде этого:

/** 
* possible implementation of onBeforeCompileHead 
* to make all the scripts async. 
*/ 
public function onBeforeCompileHead() { 

    $document = JFactory::getDocument(); 

    foreach ($document->_scripts => $url) { 
     $document->_scripts[$url]['async'] = true; 
    } 
} 

Вместо если вы хотите просто сделать JS вашего приложения или вашего шаблона используйте JDocument :: addScript(); например:

/** 
* Possible implementation to insert a async script in a component or a module. 
* @see JDocument::addScript($url, $type = "text/javascript", $defer = false, $async = false) 
*/ 
$document = JFactory::getDocument(); 
$document->addScript('/media/system/js/sample.js', "text/javascript", false, true); 
Смежные вопросы