drupal_add_js
includes/common.inc, строка 2070
- Версии
- 5
drupal_add_js($data = NULL, $type = 'module', $scope = 'header', $defer = FALSE, $cache = TRUE)
- 6
drupal_add_js($data = NULL, $type = 'module', $scope = 'header', $defer = FALSE, $cache = TRUE, $preprocess = TRUE)
Добавляет JavaScript файл, настройки или код на страницу.
Действие этой функции меняется, в зависимости от параметров, с которыми она вызывается. В основном она служит для добавления кода JavaScript на страницу, как в виде ссылки на существующий файл или как участок кода прямо на странице. С помощью этой функции можно осуществить следующие действия:
- Добавить файл (
'core'
,'module'
и'theme'
): добавляет ссылку на JavaScript файл на страницу. JavaScript файлы распологаются в определённом порядке, первыми идут'core'
, затем'module'
, и, наконец,'theme'
. Так что файлы добавленные позже легко могут заменить те, что добавлены раньше.
-
Добавить JavaScript код (
'inline'
): выполняет кусок JavaScript кода помещяя его прямо на страницу. Это может, например, быть полезным, когда следует сказать пользователю о приходе нового сообщения, alert окном, и т. д.
- Добавить настройки (
'setting'
): Добавляет настройку для глобального хранилища JavaScript-настроек Drupal'а. Настройки для одной страницы необходимы некоторым модулям для соотвествующего функционирования. Настройки будут доступны через Drupal.settings.
Параметры
$data
(необязателен). Если указывается, значение зависит от параметра $type
:
'core'
,'module'
или'theme'
: Путь к файлу относительно base_path().'inline'
: JavaScript код.'setting'
: ассоциативный массив с настройками. Он помещается прямо в Drupal.settings. Вы можете захотеть поместить свои настройки в другую переменную для избежания засорения Drupal.settings.
$type
(optional) The type of JavaScript that should be added to the page. Allowed
values are 'core'
, 'module'
, 'theme'
, 'inline'
and 'setting'
. You
can, however, specify any value. It is treated as a reference to a JavaScript
file. Defaults to 'module'
.
$scope
(optional) The location in which you want to place the script. Possible
values are 'header'
and 'footer'
by default. If your theme implements
different locations, however, you can also use these.
$defer
(optional) If set to TRUE
, the defer attribute is set on the <script> tag.
Defaults to FALSE
. This parameter is not used with $type
== 'setting'
.
$cache
(optional) If set to FALSE
, the JavaScript file is loaded anew on every page
call, that means, it is not cached. Defaults to TRUE
. Used only when $type
references a JavaScript file.
$preprocess
(optional) Should this JS file be aggregated if this
feature has been turned on under the performance section?
Возвращаемое значение
If the first parameter is NULL
, the JavaScript array that has been built so
far for $scope
is returned. If the first three parameters are NULL
,
an array with all scopes is returned.
Код
<?php
function drupal_add_js($data = NULL, $type = 'module', $scope = 'header', $defer = FALSE, $cache = TRUE, $preprocess = TRUE) {
static $javascript = array();
if (isset($data)) {
// Add jquery.js and drupal.js, as well as the basePath setting, the
// first time a Javascript file is added.
if (empty($javascript)) {
$javascript['header'] = array(
'core' => array(
'misc/jquery.js' => array('cache' => TRUE, 'defer' => FALSE, 'preprocess' => TRUE),
'misc/drupal.js' => array('cache' => TRUE, 'defer' => FALSE, 'preprocess' => TRUE),
),
'module' => array(),
'theme' => array(),
'setting' => array(
array('basePath' => base_path()),
),
'inline' => array(),
);
}
if (isset($scope) && !isset($javascript[$scope])) {
$javascript[$scope] = array('core' => array(), 'module' => array(), 'theme' => array(), 'setting' => array(), 'inline' => array());
}
if (isset($type) && isset($scope) && !isset($javascript[$scope][$type])) {
$javascript[$scope][$type] = array();
}
switch ($type) {
case 'setting':
$javascript[$scope][$type][] = $data;
break;
case 'inline':
$javascript[$scope][$type][] = array('code' => $data, 'defer' => $defer);
break;
default:
// If cache is FALSE, don't preprocess the JS file.
$javascript[$scope][$type][$data] = array('cache' => $cache, 'defer' => $defer, 'preprocess' => (!$cache ? FALSE : $preprocess));
}
}
if (isset($scope)) {
if (isset($javascript[$scope])) {
return $javascript[$scope];
}
else {
return array();
}
}
else {
return $javascript;
}
}
?>
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии