it-swarm-ja.com

entitity_metadata_wrapperによる日付フィールドの設定

entity_metadata_wrapperを使用してdateタイプのフィールドを設定しようとしていますが、フィールドはmysqlで日時として作成され、ノードを作成すると、予期されたYYY-MM-DD HHが設定されます。 MM:SS形式、entity_metadata_wrapperを使用すると失敗します。挿入できたのはタイムスタンプだけです。ISO日付形式と標準形式の両方を試しました。

これは私が更新に使用しようとしている行です:

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

ありがとう!

8
stefgosselin

私はこの質問が少し前に尋ねられたことを知っていますが、この質問に出くわした人にとって、答えは http://drupal.org/node/1803286 で与えられるようです。 Entity APIには日付フィールドのセッターコールバックがないため、entity_metadata_wrapperを使用して日付値を設定することはできません。この回答で参照されているd.oノードは回避策を提供します。

5
jacobson

私はこれを回り道で機能させることができました。私はtime()で同じことを達成できたかもしれませんが、将来コードに戻った場合に自分がやっていたことを正確に追跡できるので、これは私にとってより読みやすくなっています。

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

フィールドが終了日を収集しない場合は、タイムスタンプを設定します。

$entity_wrapper->field_date = 1431670535;

ある場合:

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

投稿された例は私にはうまくいきませんでした。ユーザーエンティティで日付フィールドを設定しました。開始日のみで、時間はありません。ウィジェットは重要ではありませんが、デフォルトのテキストフィールドを使用していました。

最後に、エンティティメタデータラッパーを使用して機能させ、-> set(time())を使用するだけで済みました。以下のコードは、チェックボックスの「ブール」フィールド、製品参照フィールド、および日付フィールドの設定を示しています。

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

値の設定方法は、日付フィールドのタイプによって異なるようです。これは、開始日と終了日が指定されたDateフィールドタイプを使用した場合に機能しました。

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

別の例を使用すると、これはDateフィールド、無制限の値、開始時間のみで機能しました:

$invitation->field_dates = array(1431670535);
2