include php-файла в поле формы

Главные вкладки

Аватар пользователя Litos Litos 22 августа 2016 в 14:54

Здравствуйте!

Делаю форму через drupal_get_form. В одно из поле решаю сделать вывод календаря.
То есть делаю
<?php include_once DRUPAL_ROOT '/sites/all/modules/custom/mymodule/calendar/calendar.php'?>
В этом файле выводится календарь, при шелчке по дате происходит передача значения в поле формы.
Но проблема в том, что календарь вставляется не на место в форме, а в самом начале страницы, то есть перед тегом html. И это вообще не красиво смотрится.
Пожалуйста, подскажите правильно ли я вставляю php-файл и может проблема не в этом?

Спасибо!

Комментарии

Аватар пользователя Litos Litos 22 августа 2016 в 15:52

Пожалуйста.

<?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(000$month01$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);
}
?>
Аватар пользователя bumble bumble 22 августа 2016 в 16:23
1

Вот здесь:

<?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.

Аватар пользователя Litos Litos 22 августа 2016 в 15:46

Спасибо, но о таких реализациях календаря я знаю.
Мне необходим чтобы он не открывался при нажатии на поле, а показывался сразу. Дело в том, что это будет календарь для бронирования и на нем сразу будут отображатся занятые и свободные дни.