Configurando um campo de data por meio de entitity_metadata_wrapper

8

Estou tentando definir um campo do datetipo através do uso de entity_metadata_wrappermas, embora o campo seja criado como data e hora no mysql, e a criação de um nó o define com o formato esperado AAA-MM-DD HH: MM: SS, quando o uso entity_metadata_wrapperfalhar. A única coisa que consegui inserir são os carimbos de data e hora. Tentei o formato de data ISO e o padrão.

Aqui está a linha que estou tentando usar para atualizar:

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

Obrigado!

stefgosselin
fonte

Respostas:

5

Sei que essa pergunta foi feita há algum tempo, mas para aqueles que se deparam com essa pergunta, a resposta parece ser dada em http://drupal.org/node/1803286 . Não há retorno de chamada do configurador para os campos de data na API da entidade, portanto, você não pode definir valores de data usando entity_metadata_wrapper. O nó do mencionado nesta resposta fornece uma solução alternativa.

jacobson
fonte
Boa pegada! -> Marcado para a próxima vez eu tenho que jogar com campos de data. Obrigado amigo.
stefgosselin
8

Consegui fazer com que isso funcionasse de maneira indireta. Talvez eu tenha conseguido fazer a mesma coisa time(), mas isso foi melhor para mim, pois eu poderia seguir exatamente o que estava fazendo se voltasse ao código no 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());
anniegreens
fonte
5

Se o campo não coletar data de término, defina-o com carimbo de data e hora:

$entity_wrapper->field_date = 1431670535;

Se isso acontecer:

$entity_wrapper->field_date = array(
  'value' => '2015-05-12 11:30:38',
  'value2' => '2015-05-25 21:45:33',
);
ya.teck
fonte
Isso é mais útil para mostrar como definir datas sem data final.
Reedbert
3

Os exemplos publicados não funcionaram para mim. Eu tinha uma configuração de campo de data na entidade do usuário, com apenas uma data de início e sem tempo. O widget não deveria importar, mas estava apenas usando o campo de texto padrão.

Finalmente, comecei a trabalhar usando o wrapper de metadados da entidade e só precisava usar -> set (time ()). O código abaixo mostra a configuração de um campo "booleano" da caixa de seleção, um campo de referência do produto e o campo de 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();
Blaine Lang
fonte
2

Parece que a forma como o valor é definido depende de que tipo de campo de data é. Isso funcionou para mim ao usar um Datetipo de campo, com data de início e término.

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

Usando um exemplo diferente, isso funcionou para mim com um Datecampo, valor ilimitado, apenas a hora de início:

$invitation->field_dates = array(1431670535);
tyler.frankenstein
fonte
11
Você não quer dizer valuee value2?
artfulrobot