Impostazione di un campo data tramite entitity_metadata_wrapper


8

Sto cercando di impostare un campo di datetipo mediante l'utilizzo di entity_metadata_wrapperma sebbene il campo sia creato come datetime in mysql, e la creazione di un nodo lo imposta con il formato previsto AAA-MM-GG HH: MM: SS, quando lo si utilizza entity_metadata_wrappernon riesce. L'unica cosa che sono riuscito a inserire sono i timestamp, ho provato sia il formato data Iso che quello standard.

Ecco la linea che sto cercando di utilizzare per l'aggiornamento:

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

Grazie!

Risposte:


5

So che questa domanda è stata posta qualche tempo fa, ma per coloro che si imbattono in questa domanda, la risposta sembra essere data a http://drupal.org/node/1803286 . Non esiste alcun callback setter per i campi della data nell'API Entity, quindi non è possibile impostare i valori della data utilizzando entity_metadata_wrapper. Il nodo do a cui fa riferimento questa risposta fornisce una soluzione alternativa.


Bella presa! -> Aggiunto ai segnalibri per la prossima volta che devo giocare con i campi data. Grazie amico.
stefgosselin,

8

Sono stato in grado di farlo funzionare in modo circolare. Potrei essere riuscito a fare la stessa cosa con time(), ma questo mi ha letto meglio perché potrei seguire esattamente quello che stavo facendo se tornassi al codice in futuro.

// 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());

5

Se il campo non raccoglie la data di fine, impostala con il timestamp:

$entity_wrapper->field_date = 1431670535;

Se lo fa:

$entity_wrapper->field_date = array(
  'value' => '2015-05-12 11:30:38',
  'value2' => '2015-05-25 21:45:33',
);

Questo è molto utile per mostrare come impostare le date senza data di fine.
reedbert,

3

Gli esempi pubblicati non hanno funzionato per me. Avevo impostato un campo data sull'entità utente, con solo una data di inizio e nessuna ora. Il widget non dovrebbe importare, ma stava semplicemente usando il campo di testo predefinito.

Finalmente ha funzionato usando il wrapper metadata entità e doveva solo usare -> set (time ()). Il codice seguente mostra l'impostazione di un campo "booleano", un campo di riferimento del prodotto e il campo della data.

$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();

2

Sembra che l'impostazione del valore dipenda dal tipo di campo data che è. Questo ha funzionato per me quando ho usato un Datetipo di campo, che aveva una data di inizio e fine.

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

Usando un esempio diverso, questo ha funzionato per me con un Datecampo, valore illimitato, solo ora di inizio:

$invitation->field_dates = array(1431670535);

1
Non intendi valuee value2?
artfulrobot,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.