Mengatur bidang tanggal melalui entitity_metadata_wrapper

8

Saya mencoba untuk menetapkan bidang datetipe melalui penggunaan entity_metadata_wrappertetapi meskipun bidang tersebut dibuat sebagai datetime di mysql, dan membuat simpul menetapkannya dengan yang diharapkan YYY-MM-DD HH: MM: format SS, ketika menggunakan entity_metadata_wrappergagal. Satu-satunya hal yang berhasil saya sisipkan adalah cap waktu, saya sudah mencoba format tanggal Iso dan yang standar.

Inilah baris yang saya coba gunakan untuk memperbarui:

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

Terima kasih!

stefgosselin
sumber

Jawaban:

5

Saya tahu pertanyaan ini ditanyakan beberapa waktu lalu, tetapi bagi mereka yang menemukan pertanyaan ini, jawabannya tampaknya diberikan di http://drupal.org/node/1803286 . Tidak ada setback callback untuk bidang tanggal di API Entity, jadi Anda tidak bisa mengatur nilai tanggal menggunakan entitas_metadata_wrapper. Simpul do yang dirujuk dalam jawaban ini memberikan solusi.

Jacobsson
sumber
Tangkapan bagus! -> Ditandai untuk waktu berikutnya saya harus bermain dengan bidang tanggal. Terima kasih teman.
stefgosselin
8

Saya bisa membuat ini bekerja secara tidak langsung. Saya mungkin dapat mencapai hal yang sama dengan time(), tetapi ini membaca lebih baik bagi saya karena saya bisa mengikuti dengan tepat apa yang saya lakukan jika saya pernah kembali ke kode di masa depan.

// 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
sumber
5

Jika bidang tidak mengumpulkan tanggal akhir, atur dengan stempel waktu:

$entity_wrapper->field_date = 1431670535;

Jika ya:

$entity_wrapper->field_date = array(
  'value' => '2015-05-12 11:30:38',
  'value2' => '2015-05-25 21:45:33',
);
ya.teck
sumber
Ini paling berguna untuk menunjukkan cara mengatur tanggal tanpa tanggal akhir.
Reedbert
3

Contoh yang diposting tidak berfungsi untuk saya. Saya memiliki pengaturan bidang tanggal pada entitas pengguna, dengan hanya tanggal mulai dan tanpa waktu. Widget seharusnya tidak masalah, tetapi hanya menggunakan bidang teks default.

Akhirnya berhasil menggunakan pembungkus entitas metadata dan hanya perlu menggunakan -> set (waktu ()). Kode di bawah ini menunjukkan pengaturan kotak centang "boolean", bidang referensi produk dan bidang tanggal.

$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
sumber
2

Tampaknya bagaimana nilai diatur tergantung pada jenis bidang tanggal apa itu. Ini berfungsi untuk saya ketika menggunakan Datetipe bidang, yang memiliki tanggal mulai dan berakhir.

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

Menggunakan contoh berbeda, ini berfungsi untuk saya dengan Datebidang, nilai tidak terbatas, waktu mulai saja:

$invitation->field_dates = array(1431670535);
tyler.frankenstein
sumber
1
Bukankah maksud Anda valuedan value2?
artfulrobot