Wie kann ich mithilfe der Formular-API und hook_form_alter () die Werte für jeden Datumsfeldtyp von Drupal 7 mithilfe eines gültigen Unix-Zeitstempels manuell festlegen (erzwingen)?
Wenn das Formular endgültig gesendet wird, sind die field_date-Typen immer leere Arrays. Unten ist der kaputte Code, mit dem ich arbeite.
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();
}
Ich sollte erwähnen, dass das Feld-Widget auf Text eingestellt ist und das Format "Ymd H: i: s" lautet.
Ich habe es auch versucht date('Y-m-d H:i:s', time())
statt time()
.
Beispielausgabe von dpm ().
Ich sollte auch beachten, dass ich als Problemumgehung das Feld festlegen kann, wenn ich es in hook_node_presave () ändere . Um dies zu tun, $node->field_date['und'][0]['value'] = date('Y-m-d H:i:s', $my_unix_timestamp);
möchte ich immer noch verstehen, wie dies stattdessen mit hook_form_alter gemacht wird.
$form['field_date'][LANGUAGE_NONE][0]['#default_value']['value']
?Antworten:
Hier ist ein Code, der die Zeitzone der Site für mich richtig behandelt:
quelle
'timezone' => variable_get('date_default_timezone', 'UTC'),
?Jeder Datumsfeldtyp erwartet einen anders formatierten Zeitstempel (basierend darauf, wie er in der Datenbank gespeichert ist):
Auf diese Informationen wurde aus dem Abschnitt mit der Bezeichnung Datum (Datum / Uhrzeit, Datum, Datumsstempel) in fooninjas Blog verwiesen.
Dies ist auch eine großartige allgemeine Ressource für die programmatische Knotenerstellung in Drupal 7.
quelle
Das hat bei mir funktioniert.
quelle
Der
time()
Wert funktioniert auf dieser Ebene nicht.Sie müssen etwas verwenden wie:
quelle
$form['field_date'][LANGUAGE_NONE][0]['#default_value']['value']
wie oben erwähnt einzustellen ?Für Date-Sachen könnten wir ein js schreiben, um das aktuelle Datum zu erhalten ...
quelle
Wenn Sie einen Feldtyp verwenden,
Date (ISO format)
verwenden Sie:quelle
Versuche dies:
quelle
Für diejenigen, die sich mit $ form_state und dem Popup-Widget beschäftigen:
quelle
Um einen Wert auf ein Datumsfeld festzulegen, folgen Sie den nachstehenden Codes.
Hook_form_alter verwenden
Verwenden von hook_node_submit oder hook_node_presave (Speichern des Werts in der Datenbank)
Wenn Sie den Wert eines benutzerdefinierten Felds (definiert in hook_form_alter) in einem anderen speichern müssen, lesen Sie die folgenden Codes.
quelle
Die akzeptierte Antwort gab mir eine PDO-Ausnahme. Nur ein einfacher Aufruf von time () funktionierte für ein "Datenstempel" -Feld!
quelle
benutzte Zeit () und funktionierte OK ....
$ fc_item_wrapper-> field_data_pedido-> set (time ());
quelle