Đặt trường ngày thông qua entitity_metadata_wrapper


8

Tôi đang cố gắng thiết lập một trường dateloại thông qua việc sử dụng entity_metadata_wrappernhưng mặc dù trường được tạo dưới dạng datetime trong mysql và tạo một nút đặt nó với định dạng YYY-MM-DD HH: MM: SS dự kiến, khi sử dụng entity_metadata_wrapperkhông thành công. Điều duy nhất tôi đã quản lý để chèn là dấu thời gian, tôi đã thử cả định dạng ngày Iso và định dạng chuẩn.

Đây là dòng tôi đang cố gắng sử dụng để cập nhật:

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

Cảm ơn!

Câu trả lời:


5

Tôi biết câu hỏi này đã được hỏi cách đây một thời gian, nhưng đối với những người bắt gặp câu hỏi này, câu trả lời dường như được đưa ra tại http://drupal.org/node/1803286 . Không có cuộc gọi lại setter cho các trường ngày trong API thực thể, vì vậy bạn không thể đặt giá trị ngày bằng cách sử dụng entity_metadata_wrapper. Nút do được tham chiếu trong câu trả lời này cung cấp một cách giải quyết.


Bắt tốt đẹp! -> Được đánh dấu cho lần tiếp theo tôi phải chơi với các trường ngày. Cảm ơn bạn.
stefgosselin

8

Tôi đã có thể làm điều này để làm việc theo cách vòng vo. Tôi có thể đã có thể hoàn thành điều tương tự time(), nhưng điều này đọc tốt hơn cho tôi vì tôi có thể làm theo chính xác những gì tôi đã làm nếu tôi trở lại mã trong tương lai.

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

Nếu trường không thu thập ngày kết thúc, hãy đặt dấu thời gian:

$entity_wrapper->field_date = 1431670535;

Nếu nó không:

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

Điều này hữu ích nhất để hiển thị cách đặt ngày không có ngày kết thúc.
reedbert

3

Các ví dụ được đăng không làm việc cho tôi. Tôi đã thiết lập trường ngày trên thực thể người dùng, chỉ với ngày bắt đầu và không có thời gian. Các widget không quan trọng, nhưng chỉ sử dụng trường văn bản mặc định.

Cuối cùng, nó đã hoạt động bằng cách sử dụng trình bao bọc siêu dữ liệu thực thể và chỉ cần sử dụng -> set (time ()). Mã bên dưới hiển thị cài đặt trường "boolean" hộp kiểm, trường tham chiếu sản phẩm và trường ngày.

$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

Dường như giá trị được đặt tùy thuộc vào loại trường ngày. Điều này làm việc cho tôi khi sử dụng một Dateloại trường, có ngày bắt đầu và ngày kết thúc.

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

Sử dụng một ví dụ khác, điều này làm việc với tôi với một Datetrường, giá trị không giới hạn, chỉ thời gian bắt đầu:

$invitation->field_dates = array(1431670535);

1
Bạn không có nghĩa valuevalue2?
artfulrobot
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.