Как добавить JS в Drupal 7 - PullRequest
7 голосов
/ 04 июля 2011

Я хочу добавить функцию Forrst Sap на веб-сайт Drupal 7.

Во-первых, это включает в себя добавление скрипта jquery.sap.js на сайт, что я могу сделать через мой файл .info. Я понимаю, что должен заменить, что jQuery теперь является пространством имен, чтобы избежать конфликтов с другими библиотеками Javascript, такими как Prototype. Весь ваш код, который ожидает использовать jQuery в качестве $, должен быть заключен во внешний контекст, например так.

(function ($) {
  // All your code here
}(jQuery));

Но я не уверен, как определить поведение Drupal для этого кода?

Во-вторых, я должен добавить встроенный код:

$('#item').sap({
    distanceFromTheTop: 0
});

Полагаю, я могу сделать это с drupal_add_js, но, опять же, я не уверен, как это сделать через файл template.php?

Спасибо за вашу помощь!

Ответы [ 3 ]

9 голосов
/ 05 июля 2011

Вот небольшой пример кода для добавления файла JavaScript в Drupal.

(function ($) {
  Drupal.behaviors.[myName] =  {
    attach: function(context, settings) {

      //Begin my code
      var myVarOne,
          myVarTwo;

      $('#item').sap({
        distanceFromTheTop: 0
      });
     //I'm done with my code

    }
  };
})(jQuery);

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

Если вам нужен скрипт на каждой странице или если он маленький, добавьте его через файл [template_name] .info с помощью scripts[] = myscript.js или если в папке вашего шаблона есть подпапка для скриптов с именем js, используйте scripts[] = js/myscript.js

p.s. Взгляните на drupal.stackexchange.com

2 голосов
/ 14 ноября 2012

Я использовал следующую строку для успешного добавления кода javascript на мой сайт drupal:

drupal_add_js(drupal_get_path('module', 'my_module') .'/js/mycode.js', array('type' => 'file', 'scope' => 'footer'));

И следующую строку для передачи простых переменных данных в вышеупомянутый / js / mycode.js:

drupal_add_js(array('my_module' => array('key' => 'value', ''))), 'setting');

Вышеуказанная переменная доступна в mycode.js через следующее:

Drupal.settings.my_module.key;

PS: whileВы пытаетесь включить файл .js через template.php, я успешно использую приведенный выше код в пользовательском модуле.

Я не уверен, будет ли мое точное решение работать с вашей стратегией.

0 голосов
/ 10 апреля 2018

Мы можем добавить JS в drupal, используя следующий метод

1.) По drupal_add_js() function

drupal_add_js() - это функция drupal api, включающая js.

Пример:

drupal_add_js('misc/collapse.js');

// добавить файл JS

drupal_add_js('misc/collapse.js', 'file');

// Для включения встроенного JavaScript

drupal_add_js('jQuery(document).ready(function () { alert("Hello!"); });', 'inline');

// Для включения встроенногоjavascript и включающий и включающий его в нижний колонтитул

drupal_add_js('jQuery(document).ready(function () { alert("Hello!"); });', array(
  'type' => 'inline',
  'scope' => 'footer',
  'weight' => 5,
));

// Для включения внешнего JS

drupal_add_js('http://example.com/example.js', 'external');

// Для передачи значения php в JS

drupal_add_js(array(
  'myModule' => array(
    'key' => 'value',
  ),
), 'setting');

Пример:

drupal_add_js(drupal_get_path('module', 'mymodule') . '/mymodule.js');

для получения дополнительной информации https://api.drupal.org/api/drupal/includes%21common.inc/function/drupal_add_js/7.x

2.) При добавлении с помощью API формы

мы можем использовать свойство "#attached"формы API для включения JS

Пример:

$form['#attached']['js'] = array(
  drupal_get_path('module', 'ajax_example') . '/ajax_example.js',
);

3.) Добавление JS в информационный файл

Мы можем включить JavaScript в файл сценария

Пример:

name = My theme
description = Theme developed by me.
core = 7.x
engine = phptemplate

scripts[] = mytheme.js

4.) С помощью функции предварительной обработки

если мы хотим условно включить JS, мы можем включить ее в функцию предварительной обработки

function mytheme_preprocess_page(&$vars, $hook) {
  if (true) {
    drupal_add_js(drupal_get_path('theme', 'mytheme') . '/mytheme.js');
    $vars['scripts'] = drupal_get_js(); // necessary in D7?
  }
}
...