Коллеги помогите, столкнулся с тривиальной задачей, с которой легко справлюсь в Drupal 7. Хочу делать это аналогично и в шестой версии. Нужно элементарно сделать так, чтобы скрипт слайдера работал на одной конкретной странице и не подключался на других, для этого в шаблоне нужной страницы (например page-front.tpl.php) надо сначала подключить его, а затем активировать и задать параметры.
Как я понял на основании Drupal API (http://api.drupal.ru/api/function/drupal_add_js) добавить скрипт на страницу в шестой версии можно вот так:
drupal_add_js(drupal_get_path('theme', 'my_theme') . 'js/my_slider.js');
My theme - это название моей темы, разумеется.
Далее мне нужно вызвать в шаблоне кусок js-кода, который будет активировать этот слайдер и задавать определённые параметры, такие как скорость слайдов и всё такое прочее, я думаю на основании прочитанного выводить это надо так:
drupal_add_js('
$(document).ready(function(){
$("#myController").jFlow({
controller: ".jFlowControl",
slideWrapper : "#jFlowSlider",
slides: "#mySlides",
selectedWrapper: "jFlowSelected",
width: "100%",
height: "400px",
duration: 300,
prev: ".jFlowPrev",
next: ".jFlowNext",
auto: true
});
});', 'inline');
Я не пробовал использовать данный код, поскольку в нём есть строка "$(document).ready", которая меня и смущает. Получается она же не будет работать эта функция, если мы скрипт таким образом добавляем через php? Как вообще правильно добавить не скрипт, а именно кусок скрипта в head в Drupal6? И если то что выше - правильно, то что тогда такое за конструкции вида:
<?php drupal_set_html_head('<script type="text/javascript" src="/sites/all/themes/chgakitheme/js/jquery.montage.min.js"></script>'); ?>
<?php drupal_set_html_head('<script type="text/javascript">var $cjQuery = jQuery.noConflict(true);</script>'); ?>
Как я понял они то же самое делают? В чём разница? В чём подвох?))
Ответы
Подключить js на определённых страницах можно так:
function phptemplate_preprocess_page(&$variables) {
if (страница) {
drupal_add_js(path_to_theme() . '/script.js');
$variables['scripts'] = drupal_get_js();
}
}
Инициализацию слайдера лучше вынести в отдельный js и подключить способом выше. В самом файле вместо $(document).ready пользоваться Behaviors.
Спасибо, это в page.tpl.php прописать, не в template.php?
В tpl файлах не может быть никаких функций. Начните с мат. части.
Да точно, туплю, мат. части много) Сайт этот в закладках