Używając Form API i hook_form_alter () , w jaki sposób mogę ręcznie ustawić (wymusić) wartości dla każdego typu pola daty Drupala 7, używając prawidłowego znacznika czasu Unix?
Po ostatecznym przesłaniu formularza typy data_pola są zawsze pustymi tablicami. Poniżej znajduje się zepsuty kod, nad którym pracuję.
hook_form_alter(&$form, &$form_state, $form_id) {
// http://drupal.org/node/1455576 - Date
$form['field_date'][LANGUAGE_NONE][0]['value'] = time();
// http://drupal.org/node/1455576 - Date (ISO Format)
$form['field_date_iso_format'][LANGUAGE_NONE][0]['value'] = time();
// http://drupal.org/node/1455576 - Date (Unix Timestamp)
$form['field_date_unix_timestamp'][LANGUAGE_NONE][0]['value'] =time();
}
Powinienem wspomnieć, że widget pól jest ustawiony na tekst, a jego format to „Ymd H: i: s”
Próbowałem też date('Y-m-d H:i:s', time())
zamiast time()
.
Przykład danych wyjściowych dpm ().
Powinienem również zauważyć, że jako obejście problemu mogę ustawić pole, jeśli zmodyfikuję je w hook_node_presave (). Aby to zrobić, ustawiłem $node->field_date['und'][0]['value'] = date('Y-m-d H:i:s', $my_unix_timestamp);
nadal chciałbym zrozumieć, jak to zrobić za pomocą hook_form_alter.
$form['field_date'][LANGUAGE_NONE][0]['#default_value']['value']
?Odpowiedzi:
Oto kod, który odpowiednio dla mnie traktuje strefę czasową witryny:
źródło
'timezone' => variable_get('date_default_timezone', 'UTC'),
?Każdy typ pola daty oczekuje inaczej sformatowanego znacznika czasu (w zależności od tego, jak jest przechowywany w bazie danych):
Informacje te zostały przywołane w sekcji Data pole (data, godzina, datownik ) na blogu fooninja.
Jest to również wielki ogólny zasób do programowego tworzenia węzłów w Drupal 7.
źródło
To zadziałało dla mnie.
źródło
time()
Wartość nie będzie działać na tym poziomie.Musisz użyć czegoś takiego jak:
źródło
$form['field_date'][LANGUAGE_NONE][0]['#default_value']['value']
jak wspomniano powyżej?Dla rzeczy związanych z datą moglibyśmy napisać js dla uzyskania bieżącej daty ...
źródło
Jeśli używasz typu pola,
Date (ISO format)
użyj:źródło
Spróbuj tego:
źródło
Dla osób zajmujących się $ form_state i widgetem popup:
źródło
Aby ustawić wartość w polu daty, postępuj zgodnie z poniższymi kodami.
Korzystanie z hook_form_alter
Korzystanie z hook_node_submit lub hook_node_presave (Zapisywanie wartości w bazie danych)
Lub jeśli chcesz zapisać wartość jednego niestandardowego pola (zdefiniowanego w hook_form_alter) w innym, zobacz poniższe kody.
źródło
Przyjęta odpowiedź dawała mi wyjątek od ChNP. Tylko proste wywołanie time () działało dla pola „datestamp”!
źródło
użyłem czasu () i pracowałem OK ....
$ fc_item_wrapper-> field_data_pedido-> set (time ());
źródło