En utilisant l' API Form et hook_form_alter () , comment puis-je définir (forcer) manuellement les valeurs pour chacun des types de champs de date de Drupal 7 en utilisant un horodatage Unix valide?
Lorsque le formulaire est finalement soumis, les types field_date sont toujours des tableaux vides. Voici le code cassé à partir duquel je travaille.
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();
}
Je dois mentionner que le widget champs est défini sur texte et que son format est «Ymd H: i: s»
J'ai également essayé date('Y-m-d H:i:s', time())
au lieu de time()
.
Exemple de sortie dpm ().
Je dois également noter qu'en guise de solution de contournement, je peux définir le champ si je le modifie dans hook_node_presave (). Pour ce faire, j'ai défini que $node->field_date['und'][0]['value'] = date('Y-m-d H:i:s', $my_unix_timestamp);
je voudrais toujours comprendre comment le faire en utilisant hook_form_alter à la place.
$form['field_date'][LANGUAGE_NONE][0]['#default_value']['value']
?Réponses:
Voici un code qui traite le fuseau horaire du site pour moi:
la source
'timezone' => variable_get('date_default_timezone', 'UTC'),
?Chaque type de champ de date attend un horodatage de format différent (en fonction de la façon dont il est stocké dans la base de données):
Ces informations ont été référencées dans la section intitulée Champ de date (datetime, date, datestamp) sur le blog de fooninja.
C'est également une excellente ressource générale pour la création de nœuds programmatiques dans Drupal 7.
la source
Cela a fonctionné pour moi.
la source
La
time()
valeur ne fonctionnera pas à ce niveau.Vous devez utiliser quelque chose comme:
la source
$form['field_date'][LANGUAGE_NONE][0]['#default_value']['value']
comme mentionné ci-dessus?Pour les trucs de date, nous pourrions écrire un js pour obtenir la date actuelle ...
la source
Si vous utilisez un type de champ,
Date (ISO format)
utilisez:la source
Essaye ça:
la source
Pour ceux qui traitent de $ form_state et du widget popup:
la source
Pour définir une valeur sur un champ de date, suivez les codes ci-dessous.
Utilisation de hook_form_alter
Utilisation de hook_node_submit ou hook_node_presave (enregistrement de la valeur dans la base de données)
Ou si vous devez enregistrer la valeur d'un champ personnalisé (défini dans hook_form_alter) dans un autre, voir les codes ci-dessous.
la source
La réponse acceptée me donnait une exception AOP. Seul un simple appel time () a fonctionné pour un champ "datestamp"!
la source
utilisé le temps () et travaillé OK ....
$ fc_item_wrapper-> field_data_pedido-> set (time ());
la source