Писать на форуме DIAFAN.CMS могут только зарегистрированные пользователи. Войдите или зарегистрируйтесь.

Форум Модули DIAFAN.CMS Создание модулей Как не асинхронно подключить js из модуля


Dmitry (weissfl) 14715 августа

Если подключать js через $this->diafan->_site->js_view[] то файл подключается с асинхронной загрузкой через asyncsrc. Можно ли как то отключить это для некоторых файлов?

Андрей (R4W) 9115 августа

Все внутренние скрипты по умолчанию асинхронно подключаются

Код

foreach($this->diafan->_site->js_view as $path)
{
if(in_array($path, $js_view))
continue;

$js_view[] = $path;

$paths = array();
if (substr($path, 0, 4) != 'http')

Показать весь код
{
if(Custom::path($path))
{
echo '
<script type="text/javascript" asyncsrc="'.BASE_PATH.File::compress(Custom::path($path), 'js').'"></script>';
}
}
else
{
echo '
<script type="text/javascript" src="'.$path.'"></script>';
}
}



в этой секции можно подредактировать. Как вариант класть в $this->diafan->_site->js_view[] массив например async => false, src => ... ну и для него условие прописать в show_js
Спасибо сказали: Dmitry (weissfl)

Dmitry (weissfl) 14715 августа

Спасибо.
Но редактировать что то не хочется файлы. Думал есть что то встроенное для этого.

Виталий NVGPRO (DIAFAN.CMS) 33415 августа

Можно ли как то отключить это для некоторых файлов?

Можно, но не совсем понятно для чего нужно так делать. Возможно присутствует непонимание синхронной/асинхронной загрузки. Асинхронная загрузка Javascript позволяет браузеру не дожидаться ее загрузки и продолжать загрузку основного HTML и других ресурсов. В результате увеличивается скорость работы сайта для посетителя. Вы же хотите лишиться такого преимущества. Ради чего? Может вопрос лишь в том, что нужный Вам js-код должен начать исполняться после загрузки основных js-файлов cms? Тогда можно поступить, например, так.

Скажем, нам нужно выстрелить после готовности DOM
Код

$(document).ready(function() {
console.log("Сформирован DOM");
});

Или тоже самое так
Код

$(function() {
console.log("Сформирован DOM");
});


Событие ready, которое описано выше, выстреливает в момент готовности DOM. При этом оно происходит раньше начала загрузки мультимедийных файлов. Если нам нужно стрельнуть вообще в самом конце. Например, когда сформирован DOM и загружены мультимедийные файлы, можем использовать событие onload. Это родная функция JavaScript.

Если нам нужно выстрелить не после готовности DOM, а после загрузки основных js-файлов cms. Например, нам нужно сделать ajax-запрос с использованием объекта diafan_ajax. Или мы вывели кнопку ajax-запроса с использованием объекта diafan_ajax. Дело в том, что нет гарантии, что пользователь не нажмет эту кнопку до загрузки файла с объектом diafan_ajax. В таком случае получим js-ошибку. Поэтому можем использовать следующую конструкцию.
Код
$(document).on('diafan.ready', function(){
console.log('Сформирован DOM, загружены основные JS-объекты DIAFAN.CMS');
});

Такая конструкция справедлива не только для общей части сайта, но и для административной.

Так что всё зависит от поставленных задач. Решений множество. И в cms есть для этого все необходимые инструменты. Ими лишь надо пользоваться. О многом, кстати Марина рассказывает в очень доступной форме (в отличие от меня ). Например, вот: https://user.diafan.ru/blogs/show23/
Спасибо сказали: Dmitry (weissfl)