Здравствуйте!
Сутки пытаюсь найти решение по проблеме "навешивания" календаря на клик по текстовому полю в собственном модуле. Натыкался на разные вещи, но конкретно этого решения не нашел.
Библиотеки подключил функцией drupal_add_js () вот так:
drupal_add_js (drupal_get_path ('module','leasing')."/js/jquery.ui.datepicker.js");
Далее, как я понял, нужно изменить id textfielda. Вот так
не работает.
И еще, нужно включить неизвестный js-код в саму страницу. (Зачем текстом? Нельзя файлом? Где и как это правильно сделать? Пожалуйста, поясните, что этот код делает.)
Заранее всем спасибо!
PS. Можно и ссылку... но я искал...
Комментарии
можно и файлом
<?php
drupal_add_js (drupal_get_path ('module','leasing')."/js/jquery.ui.core.js");
drupal_add_js (drupal_get_path ('module','leasing')."/js/jquery.ui.datepicker.js");
drupal_add_js (drupal_get_path ('module','leasing')."/js/file.js");
?>
в file.js что-то типа:
$('#datepicker').datepicker();
});
в каком хуке этот код находится?
Мне в своё время помогло ковыряние пикера из модуля Date, Date popup чтоли
Думаю, в хуке block пока. Также думал вынести этот код в функцию, возвращающую форму.
А что этот код означает?
дак вы только думаете) ну поэтому и
ничего, это пример того
Ответ оказался следующим.
1) Подключаем три js файла (jquery уже имеется в drupal)
drupal_add_js (drupal_get_path ('module','leasing')."/js/jquery.ui.datepicker.js");
drupal_add_js (drupal_get_path ('module','leasing')."/js/file.js");
2) При генерации формы средствами drupal у каждого элемента есть свой id. Насколько я понял, за него отвечает индекс в массиве при определении формы (массив для drupal_get_form).
В файле file.js пишем
$('#edit-start-date').datepicker();
$('#edit-finish-date').datepicker();
});
Пояснения:
$('#id_element').datepicker(); - прикрепит к элементу календарик, где id_element - идентификатор (id) элемента, про который было упомянуто выше.
Внутри {} в файле file.js таких строк, начинающихся со знака $, может быть несколько, как в примере.
3) Подключаем оформление.
Качаем тему на оформление, скидываем её в каталог с модулем, в модуле дописываем примерно следующее:
Здесь в под "/css/start/jquery-ui-1.8.2.custom.css" подразумевается путь к файлу со стилями.
4) Локализуем интерфейс
Из скачанного архива с datapicker'ом со копируем файл "jquery.ui.datepicker-ru.js". Подключаем его также, как и остальные js-скрипты. Все. Наслаждаемся работой других программистов.
Всем спасибо!
PS. Не все всегда решается "методом тыка", я часто сначала предпочитаю думать, а потом делать и не нахожу в этом ничего предосудительного.
Вместо всего этого можно написать следующую функцию
В файле template.php
<?php
function my_theme_name_theme()
{
/*
* Регистрируем тему для формы my_module_my_form
* При генерации будет вызвана функция my_theme_name_my_module_my_form для отображения html
* см. модуль my_module
*/
return array(
'my_module_my_form' => array(
'arguments' => array('form' => Null),
),
);
}
?>
И затем в файле my_module.module
<?php function my_theme_name_my_module_my_form(&$element)
{
jquery_ui_add('ui.datepicker');
drupal_add_css(drupal_get_path('module', 'jquery_ui').'/jquery.ui/themes/default/ui.all.css');
$output = '
<script type="text/javascript">
$(document).ready(function(){
// этот id можно посмотреть в Html коде страницы, например через FB
$( "#edit-burthday" ).datepicker({
changeMonth: true,
changeYear: true
});
});
</script>';
$output .= drupal_render($element['vacancy']);
$output .= drupal_render($element['personal_data']['burthday']);
return $output;
}?>
И все, и здесь можно извращать HTML, как тебе угодно.
Все, кому нужно что-то подобное смотрите -"Темизация форм".