Как использовать headjs с Joomla? - PullRequest
1 голос
/ 31 августа 2011

Попытка использовать HeadJS в Joomla.Я добавил код в свой шаблон - он захватывает файлы javascript в выводе head, подготавливает строку для вывода их между кодом head.js, а затем удаляет все файлы javascript из тега вывода joomla.

Проблема в том, чточто некоторые скрипты загружаются после шаблона.Например, модуль будет ставить в очередь некоторые файлы сценариев после загрузки шаблона, поэтому его файлы появляются вне моего кода head.js.Есть идеи как мне это контролировать?

$data = $this->getHeadData();

if( $data['scripts'] ){
    foreach ($data['scripts'] as $url=>$type){
        if( !strstr($url, 'ajax.googleapis.com/ajax/libs/jquery') )
        $headjs[] = $url;
    }
    unset( $data['scripts'] );
    $data['scripts'][$template . '/js/head.js'] = array(
        'mime' => 'text/javascript',
        'defer' => false,
        'async' => false);
    $this->setHeadData($data);
}

А потом ...

 <script>
        head.js(
        <? foreach($headjs as $script): ?>
            '<?=$script?>',
        <? endforeach; ?>
            function(){
            }
        );
    </script>

1 Ответ

2 голосов
/ 25 октября 2011

Различные расширения могут подключаться к различным событиям, которые запускаются во время обработки вывода (так что даже после визуализации шаблона).

Лучший вариант, который я нашел до сих пор, - это создание системного плагина и перемещение его в порядок.последний из доступных системных плагинов.

Теперь у вас есть две опции:

  1. use onBeforeCompileHead (я полагаю, представил Joomla 1.5.23) для перемещения скриптов в headjs.
  2. используйте onAfterRender html-код события и анализируйте заголовок, чтобы он загружался с использованием headjs.

Это хорошо, если вы работаете с асинхронными сценариями, загружающимися там, где у вас естьполный контроль над сайтом, но практически невозможно реализовать как универсальное расширение для Joomla.Некоторые расширения используют встроенные скрипты в заголовке, некоторые в теле html, и вам нужно сохранить порядок выполнения (простой пример: Mootools должен загружаться первым).

Я использую для асинхронной загрузки только те скрипты, которыеЯ включил себя (в моем шаблоне или моем расширении).Любые скрипты, которые добавляются с помощью ядра Joomla (Mootools, core.js и т. Д.) Или других расширений, которые я не затрагиваю.

...