[Решено] Проблема с полем типа date

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

Аватар пользователя vic vic 20 февраля 2010 в 8:47

Для ноды определил дополнительное поле типа 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 198.
# 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), т.е. получается что на этапе предпросмотра временная метка преобразуется в массив значений дат.
Как сделать корректно работу поля с датой?

Комментарии

Аватар пользователя vic vic 20 февраля 2010 в 9:34

Решение найдено!
При предпросмотре $node->f_date_close уже является массивом с датами, и мы его отправляем второй раз на преобразование массив - это и вызывало ошибку.

Решение:
<?php'#default_value' => is_array($node->f_date_close) ? $node->f_date_close : _mymodule_u2d($node->f_date_close),?>

Аватар пользователя VladSavitsky VladSavitsky 20 февраля 2010 в 11:31

По-моему вы что-то намудрили.
В друпал есть нормальна работа с датами. Есть модуль Date, который добавляет все, что нужно ещё.
Чего реально нет - названий месяцев в родительном падеже. Вот для этого я писал свою функцию, а остальное уже сделано за нас и давно.

Аватар пользователя vic vic 20 февраля 2010 в 14:12

"VladSavitsky" wrote:

Согласен, что есть готовые решения.
Но мне нужно было именно такое решение. Плюсом подобных модулей (CCK, Date) является масштабируемость, а плюс самописа - скорость работы

Аватар пользователя PVasili PVasili 5 мая 2010 в 10:49

"VladSavitsky" wrote:
Есть модуль Date, который добавляет все, что нужно ещё.
я бы не сказал, что нормальный, сплошные глюк и недоработки...