Здравствуйте!
Делаю форму через drupal_get_form. В одно из поле решаю сделать вывод календаря.
То есть делаю
<?php include_once DRUPAL_ROOT . '/sites/all/modules/custom/mymodule/calendar/calendar.php'; ?>
В этом файле выводится календарь, при шелчке по дате происходит передача значения в поле формы.
Но проблема в том, что календарь вставляется не на место в форме, а в самом начале страницы, то есть перед тегом html. И это вообще не красиво смотрится.
Пожалуйста, подскажите правильно ли я вставляю php-файл и может проблема не в этом?
Спасибо!
Комментарии
<?php
module_load_include('php', 'mymodule', 'calendar/calendar');
?>
module_load_include
Спасибо, но не помогло. Буду разбираться дальше.
Приведите полный пример кода.
Пожалуйста.
<?php
//Form
function mymodule_form($form, &$form_state) {
$form['step1']['date'] = mymodule_date_field();
} //Function for calendar
function mymodule_date_field() {
include_once DRUPAL_ROOT . '/sites/all/modules/custom/mymodule/calendar_field/php/connect.php';
include_once DRUPAL_ROOT . '/sites/all/modules/custom/mymodule/calendar_field/classes/class_calendar.php';
include_once DRUPAL_ROOT . '/sites/all/modules/custom/mymodule/calendar_field/js/script.js';
$calendar = new booking_diary($link);
if(isset($_GET['month'])) $month = $_GET['month']; else $month = date("m");
if(isset($_GET['year'])) $year = $_GET['year']; else $year = date("Y");
if(isset($_GET['day'])) $day = $_GET['day']; else $day = 0;
$selected_date = mktime(0, 0, 0, $month, 01, $year);
$back = strtotime("-1 month", $selected_date);
$forward = strtotime("+1 month", $selected_date);
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$calendar->after_post($month, $day, $year);
}
$calendar->make_calendar($selected_date, $back, $forward, $day, $month, $year);
}
?>
Вот здесь:
<?php
function mymodule_form($form, &$form_state) {
$form['step1']['date'] = mymodule_date_field();
}
?>
Если Вы хотите сделать форму с помощью Form API (дабы потом можно было её вызвать в drupal_get_form()) - Вам нужно её "правильно" собрать. Выбирайте мануал, или лучше все:
Суть в том, что Вы должны собрать "угодный" Рендер-массив, из элементов доступных в FAPI, и как минимум, должен возвращаться массив:
<?php
function mymodule_form($form, &$form_state) {
$form = array();
return $form;
}
?>
Ну, а касательно подключения своей логики - все это тоже должно быть реализовано с использованием FAPI, иначе от него толку 0.
https://api.drupal.org/api/drupal/developer!topics!forms_api_reference.h...
https://www.drupal.org/project/date
https://www.drupal.org/project/datepicker
Спасибо, но о таких реализациях календаря я знаю.
Мне необходим чтобы он не открывался при нажатии на поле, а показывался сразу. Дело в том, что это будет календарь для бронирования и на нем сразу будут отображатся занятые и свободные дни.
Посмотрите Date's datepicker inline.