Définition d'un champ de date via droits_metadata_wrapper

8

J'essaie de définir un champ de datetype via l'utilisation de entity_metadata_wrappermais le bien que le champ soit créé en tant que datetime dans mysql, et la création d'un nœud le définit au format YYY-MM-DD HH: MM: SS attendu, lors de son utilisation entity_metadata_wrapperéchoue. La seule chose que j'ai réussi à insérer est les horodatages, j'ai essayé le format de date Iso et le format standard.

Voici la ligne que j'essaie d'utiliser pour mettre à jour:

   // sets reminder date in db
   $wrapper->field_event_reminder_date->set($reminder_date->format("Y-m-d H:i:s"));

Merci!

stefgosselin
la source

Réponses:

5

Je sais que cette question a été posée il y a quelque temps, mais pour ceux qui rencontrent cette question, la réponse semble être donnée à http://drupal.org/node/1803286 . Il n'y a pas de rappel de définition pour les champs de date dans l'API d'entité, vous ne pouvez donc pas définir de valeurs de date à l'aide de entity_metadata_wrapper. Le nœud do référencé dans cette réponse donne une solution de contournement.

jacobson
la source
Belle prise! -> Signet pour la prochaine fois je dois jouer avec les champs de date. Merci mon ami.
stefgosselin
8

J'ai pu faire fonctionner cela de manière détournée. J'ai peut-être été en mesure d'accomplir la même chose avec time(), mais cela a mieux lu pour moi car je pouvais suivre exactement ce que je faisais si je revenais au code à l'avenir.

// Update the Acceptance Date of Current Agreement.
$acceptance_date = new DateTime(date('Y-m-d 00:00:00'));
$company_wrapper->field_acceptance_date->set($acceptance_date->getTimestamp());
anniegreens
la source
5

Si le champ ne collecte pas de date de fin, définissez-le avec l'horodatage:

$entity_wrapper->field_date = 1431670535;

Si c'est le cas:

$entity_wrapper->field_date = array(
  'value' => '2015-05-12 11:30:38',
  'value2' => '2015-05-25 21:45:33',
);
ya.teck
la source
Ceci est très utile pour montrer comment définir des dates sans date de fin.
reedbert
3

Les exemples affichés n'ont pas fonctionné pour moi. J'avais une configuration de champ de date sur l'entité utilisateur, avec seulement une date de début et pas d'heure. Le widget ne devrait pas avoir d'importance, mais utilisait simplement le champ de texte par défaut.

Enfin, il a fonctionné en utilisant l'encapsuleur de métadonnées d'entité et n'a eu besoin que d'utiliser -> set (time ()). Le code ci-dessous montre la définition d'un champ "booléen", d'un champ de référence produit et du champ date.

$wrapper = entity_metadata_wrapper('user', $account);
$wrapper->field_subscription_active = 1;
$wrapper->field_subscriptionplan->set($line_item->commerce_product[LANGUAGE_NONE][0]['product_id']);
$wrapper->field_subscription_signup_date->set(time());
$wrapper->save();
Blaine Lang
la source
2

Il semble que la façon dont la valeur est définie dépend du type de champ de date dont il s'agit. Cela a fonctionné pour moi lors de l'utilisation d'un Datetype de champ, qui avait une date de début et de fin.

$product->field_course_event_date->set(array(
  'value' => "2013-12-09 00:00:00",
  'value2' => "2013-12-10 00:00:00",
));

En utilisant un exemple différent, cela a fonctionné pour moi avec un Datechamp, une valeur illimitée, l'heure de début uniquement:

$invitation->field_dates = array(1431670535);
tyler.frankenstein
la source
1
Tu ne veux pas dire valueet value2?
artfulrobot