Асинхронная загрузка css и js

Как использовать асинхронную загрузку css и js,
если в шаблоне мы имеем только {$aHtmlHeadFiles.css} и {$aHtmlHeadFiles.js}?

Думаю, что нужно jQuery не мержить (array('merge'=>false)), а остальное «подавать» в обертке ниже. Однако почему-то исключенные с мержа файлы подключаются ниже смерженных. Т.е. нужна возможность при подключении дополнительно указывать выше ли ниже (типа append и prepend).

При этом нужно учитывать включен ли в конфиге мерж.

Вот только как это все сделать?

8 комментариев

avatar
Асинхронная это на определенной странице подключаются только нужные файлы?
avatar
$this->Viewer_PrependScript('http://link.to/my.js');
$this->Viewer_PrependStyle('http://link.to/my.css');
avatar
Спасибо! Насколько понял, так можно сделать в плагинах.
Как это сделать в движке?
Было бы неплохо добавить опцию при подключении. Например так:
"http://link.to/my.css" => array('merge'=>false, 'order'=>prepend )

или вообще указывать приоритет:
"http://link.to/my.css" => array('merge'=>false, 'priority'=>100 )


Также интересует как сделать так, чтобы на месте {$aHtmlHeadFiles.js} выводилась последовательность:
— js, «помеченный» как без мержа и prepend
— смерженный js в обертке
$(document).ready(function() {
    $("head").append("<link rel='stylesheet' type='text/css' href='/styles.css' />");
})
— js, «помеченный» как без мержа и append
avatar
Как это сделать в движке?
Аналогично, плагины тут не причем.
Навесь хук на init_action например
avatar
$aHtmlHeadFiles = (array)$this->Viewer_GetSmartyObject()->getTemplateVars('aHtmlHeadFiles'));
$sHtmlHeadCss = (isset($aHtmlHeadFiles['css'])) ? $aHtmlHeadFiles['css'] : '';
$sHtmlHeadJs = (isset($aHtmlHeadFiles['js'])) ? $aHtmlHeadFiles['js'] : '';

$my_script_link = '<script src="//link.to/my.js"></script>';

if ( __в_начало__ ) {
	$sHtmlHeadJs = $my_script_link . $sHtmlHeadJs;
} else {
	$sHtmlHeadJs .= $my_script_link;
}
$this->Viewer_Assign('aHtmlHeadFiles', array( 'css' => $sHtmlHeadCss, 'js' => $sHtmlHeadJs ));

без мержа в начало списка вставить можно например так
avatar
Есть вариант подключения в классах типа

E::ModuleViewer()->AppendStyle(C::Get('path.assets.dir'). 'styles/1466087581/hubs/index.css');
в методе init

но по себе скажу, варик не совсем правильный, с Павлом сегодня обсуждали уже…
avatar
Таки вы уже подружились? )
avatar
Решаем рабочие дела
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.