1 (edited by PunBB 2019.09.09 07:22)

Topic: Подключение скриптов с помощью функции add_js

Функция add_js позволяет подключать файлы содержащие js & jQuery скрипты, а также подгружать скрипты из строки. Рассмотрим подробнее возможности и параметры этой функции, она находится в файле
/include/loader.php

 // Add JS url to load
   public function add_js($data = NULL, $options = NULL)
   {
      $return = ($hook = get_hook('ld_fn_add_js_start')) ? eval($hook) : null;
      if ($return !== null)
         return $return;

      if (is_null($options) || !is_array($options))
      {
         $options = array();
      }

      // Default options
      $default_options = array(
         // url, inline
         'type'      => array(
            'default'   => 'url',
         ),

         //
         'async'         => array(
            'default'   => false,
         ),

         //
         'weight'      => array(
            'default'   => 100,
         ),

         //
         'group'         => array(
            'default'   => FORUM_JS_GROUP_DEFAULT,
         ),

         //
         'every_page'   => array(
            'default'   => false,
         ),

         //
         'defer'         => array(
            'default'   => false,
         ),

         //
         'preprocess'   => array(
            'default'   => true,
         )

      );

      $length = count($default_options);
      $keys = array_keys($default_options);

      for ($i = 0; $i < $length; $i++)
      {
         $key = $keys[$i];

         if (!isset($options[$key]))
         {
            $default_options[$keys[$i]] = $default_options[$keys[$i]]['default'];
            continue;
         }

         $default_options[$keys[$i]] = $options[$key];
      }

      // Check data — url or inline code
      $default_options['data'] = forum_trim($data);
      if (empty($default_options['data']) || utf8_strlen($default_options['data']) < 1)
      {
         return FALSE;
      }

      // Tweak weight
      $default_options['weight'] += count($this->libs['js']) / 1000;

      ($hook = get_hook('ld_fn_add_js_pre_merge')) ? eval($hook) : null;

      // Add to libs
      if ($default_options['type'] != 'inline')
      {
         $this->libs['js'][$default_options['data']] = $default_options;
      }
      else
      {
         $this->libs['js'][] = $default_options;
      }

      ($hook = get_hook('ld_fn_add_js_end')) ? eval($hook) : null;

      return $this->libs['js'];
   }

Для загрузки файла скриптов, например из корня сайта используется так:

$forum_loader->add_js($base_url.'/jquery.js', array('type' => 'url', 'group' => FORUM_JS_GROUP_COUNTER));

где тип подключения по ссылке:

'type' => 'url'

Тип подключения может быть и из строки, например так:

  $my_variable = "$('#navprofile').add('#subscript').add('#navregister').add('#navlogin').add('#navlogout').insertAfter('#visit-links span:last-child');
  var mnlst = $('#visit-links li');
  for (x=0; x<mnlst.length; x++) {
    $(mnlst[x]).replaceWith($('<span>').html($(mnlst[x]).html()));
  }";

$forum_loader->add_js($my_variable, array('type' => 'inline', 'weight' => 50, 'group' => FORUM_JS_GROUP_SYSTEM));

где как видим тип подключения по ссылке, то есть:

'type' => 'inline'



$matches[2]

1

2

Re: Подключение скриптов с помощью функции add_js

Следующий параметр функции это:

'weight' => 50

это вес или приоритет подключаемых скриптов.

Важно! Если вы планируете подключать jQuery скрипты, то приоритет не должен быть выше 75, потому что 75 - это исходное значение подключаемой библиотеки jQuery, а она должна  быть всегда подключена первой, а затем все остальное, иначе ваши подключаемые скрипты просто не смогут функционировать.

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

1