Вход • Регистрация

Как не асинхронно подключить js из модуля

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

      Код

      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
      • 15 августа 2019 г.
      • Спасибо.
        Но редактировать что то не хочется файлы. Думал есть что то встроенное для этого.
  • 15 августа 2019 г.
  • Цитата
    Можно ли как то отключить это для некоторых файлов?

    Можно, но не совсем понятно для чего нужно так делать. Возможно присутствует непонимание синхронной/асинхронной загрузки. Асинхронная загрузка 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/

Новости

  • 18 июня
  • В сборке большое обновление demo-шаблона, дополнительная защита от спама, улучшение YML-импорта и еще много важного и интересного.
  • 24 апреля
  • В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
  • 12 января
  • После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке. 

Форум