Usando la API de formulario y hook_form_alter () , ¿cómo puedo configurar (forzar) manualmente los valores para cada uno de los tipos de campo de fecha de Drupal 7 usando una marca de tiempo válida de Unix?
Cuando el formulario finalmente se envía, los tipos field_date siempre son matrices vacías. A continuación se muestra el código roto desde el que estoy trabajando.
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();
}
Debo mencionar que el widget de campos está configurado en texto y su formato es 'Ymd H: i: s'
También lo he intentado en date('Y-m-d H:i:s', time())
lugar de time()
.
Ejemplo de salida dpm ().
También debo tener en cuenta que, como solución alternativa, puedo establecer el campo si lo modifico en hook_node_presave (). Para hacer esto, configuré $node->field_date['und'][0]['value'] = date('Y-m-d H:i:s', $my_unix_timestamp);
. Todavía me gustaría entender cómo hacerlo usando hook_form_alter.
$form['field_date'][LANGUAGE_NONE][0]['#default_value']['value']
?Respuestas:
Aquí hay un código que trata la zona horaria del sitio adecuada para mí:
fuente
'timezone' => variable_get('date_default_timezone', 'UTC'),
?Cada tipo de campo de fecha espera una marca de tiempo con un formato diferente (en función de cómo se almacena en la base de datos):
Esta información fue referenciada desde la sección etiquetada Campo de fecha (fecha y hora, fecha, sello de fecha) en el blog de fooninja.
Este también es un gran recurso general para la creación programática de nodos en Drupal 7.
fuente
Esto funcionó para mí.
fuente
El
time()
valor no funcionará en este nivel.Tienes que usar algo como:
fuente
$form['field_date'][LANGUAGE_NONE][0]['#default_value']['value']
como se mencionó anteriormente?Para las cosas de fecha, podríamos escribir un js para obtener la fecha actual ...
fuente
Si usa el tipo de campo
Date (ISO format)
, use:fuente
Prueba esto:
fuente
Para aquellos que tratan con $ form_state y el widget emergente:
fuente
Para establecer un valor en un campo de fecha, siga los códigos a continuación.
Usando hook_form_alter
Uso de hook_node_submit o hook_node_presave (Guardar el valor en la base de datos)
O si necesita guardar el valor de un campo personalizado (definido en hook_form_alter) en otro, vea los códigos a continuación.
fuente
La respuesta aceptada me estaba dando una excepción PDO. ¡Solo una simple llamada time () funcionó para un campo "datestamp"!
fuente
utilizaba el tiempo () y funcionaba bien ...
$ fc_item_wrapper-> field_data_pedido-> set (time ());
fuente