Thông qua tìm kiếm, tôi đã tìm thấy rất nhiều ví dụ sử dụng set()
hàm EntityMetadataWrapper để cập nhật các trường thực thể và đã triển khai thành công trong mô-đun của mình. Tuy nhiên, tôi không thể tìm thấy nhiều tài liệu / cách thực hành tốt nhất trên các tùy chọn mảng khác nhau mà bạn có thể chuyển qua set()
. Tôi muốn đảm bảo rằng cách tôi đang cập nhật dữ liệu sẽ không gây ra sự cố không lường trước sau này.
Tôi đang thực hiện cập nhật đơn giản các giá trị trường văn bản dưới dạng gửi lại cuộc gọi:
function hook_FORM_ID_submit(&$form, &$form_state) {
// Get the node.
$node = node_load($form_state['nid']);
// Create entity metadata wrapper to get and set values easily.
$node_wrapper = entity_metadata_wrapper('node', $node, array('bundle', $node->type));
// Set fields
$node_wrapper->field_quip->set(array("value" => $form_state['values']['field_quip']['value']));
$node_wrapper->field_short_sentence_summary->set(array("value" => $form_state['values']['field_short_sentence_summary']['value']));
// Save node.
$node_wrapper->save();
}
Tôi đang truyền set()
một mảng chỉ với một khóa : value
. Điều này dường như đang làm việc tốt. Tuy nhiên, tôi nhận thấy rằng khi tôi gọi value()
trên cùng một trường trước khi tôi đặt một giá trị mới, nó sẽ trả về một mảng có ba khóa:
$original_value = $node_wrapper->field_quip->value();
// Output of $original_value:
// Array (
// 'value' => '<p>The original value</p>',
// 'format' => 'general',
// 'safe_value' => '<p>The original safe value</p>',
// )
Cách tôi đang thiết lập các trường hiện tại, tôi mất giá trị vệ sinh. Điều này sẽ trở lại để cắn tôi? Tôi có nên chạy check_markup()
trên giá trị và chuyển format
và safe_value
đến set()
, chứ không phải là một mảng chỉ value
? Tôi có thể đang chia tóc ở đây, nhưng tôi muốn chắc chắn rằng tôi làm đúng.