Для ноды определил дополнительное поле типа date.
Для преобразования дат создал две функции
<?php
function _mymodule_d2u($drupal_date) {
$year = $drupal_date["year"];
$month = $drupal_date["month"];
$day = $drupal_date["day"];
return mktime(0,0,0, (int)$month, (int)$day, (int)$year);
}
function _mymodule_u2d($timestamp) {
$drupal_date["year"] = date("Y", $timestamp);
$drupal_date["month"] = date("n", $timestamp);
$drupal_date["day"] = date("j", $timestamp);
return $drupal_date;
}
?>
Первую использую при сохраниее ноды в БД, вторую при редактировании ноды
<?php
$form['f_date_close'] = array(
'#type' => 'date',
'#title' => 'Дата завершения приема голосов',
'#default_value' => isset($node->f_date_close) ? _forecast_question_u2d($node->f_date_close) : '',
);
?>
И все работает корректно, НО если при создании не сохранять ноду, а делать предпросмотр, то появляются ошибки
# warning: date() expects parameter 2 to be long, array given in Z:\home\forecast.ru\www\sites\all\modules\forecast_question\forecast_question.module on line 199.
# warning: date() expects parameter 2 to be long, array given in Z:\home\forecast.ru\www\sites\all\modules\forecast_question\forecast_question.module on line 200.
198,199,200 - строчки функции _mymodule_u2d($timestamp), т.е. получается что на этапе предпросмотра временная метка преобразуется в массив значений дат.
Как сделать корректно работу поля с датой?
Комментарии
Решение найдено!
При предпросмотре $node->f_date_close уже является массивом с датами, и мы его отправляем второй раз на преобразование массив - это и вызывало ошибку.
Решение:
<?php'#default_value' => is_array($node->f_date_close) ? $node->f_date_close : _mymodule_u2d($node->f_date_close),?>
По-моему вы что-то намудрили.
В друпал есть нормальна работа с датами. Есть модуль Date, который добавляет все, что нужно ещё.
Чего реально нет - названий месяцев в родительном падеже. Вот для этого я писал свою функцию, а остальное уже сделано за нас и давно.
Согласен, что есть готовые решения.
Но мне нужно было именно такое решение. Плюсом подобных модулей (CCK, Date) является масштабируемость, а плюс самописа - скорость работы