Tôi đang đọc một giá trị trường và định dạng của nó từ cơ sở dữ liệu. Làm thế nào tôi có thể kết xuất giá trị đó với định dạng?
Tôi đang đọc một giá trị trường và định dạng của nó từ cơ sở dữ liệu. Làm thế nào tôi có thể kết xuất giá trị đó với định dạng?
Câu trả lời:
Mặc dù bạn có thể dành nhiều thời gian để phân tích cách thức hoạt động của API trường, nhưng bạn thực sự nên sử dụng API trường trực tiếp để hiển thị nội dung trường thay vì tự truy vấn cơ sở dữ liệu. Có rất nhiều sự gói gọn và trừu tượng được thêm vào các lĩnh vực sẽ đánh thức các vị thần cũ nếu bị bỏ qua.
Sử dụng API trường, nếu bạn muốn toàn bộ trường được định dạng, hoàn thành với nhãn và tất cả các giá trị, bạn muốn sử dụng field_view_field()
:
$nid = 1;
$node = node_load($nid);
$output = field_view_field('node', $node, 'field_foo');
// $output is a render array, so it needs to be rendered first
print render($output);
Nếu bạn chỉ muốn hiển thị giá trị được định dạng của một mục trong một trường, bạn cần sử dụng field_view_value()
, liên quan nhiều hơn một chút:
// Must load field content for entity before using field_view_value()
$fields = field_get_items('node', $node, 'field_foo');
// $index corresponds to the value you want to render. First value = 0.
$index = 0;
$output = field_view_value('node', $node, 'field_foo', $fields[$index]);
print render($output);
Nếu bạn muốn sử dụng một trình định dạng khác với mặc định được chỉ định cho trường hợp trường, hãy chuyển nó bằng $display
tham số trong một trong hai field_view_field()
hoặc field_view_value()
:
$display = array('type' => 'my_formatter');
$output = field_view_field('node', $node, 'field_foo', $display);
Bằng cách kiểm tra api, tôi nghĩ bạn đang tìm kiếm cái này. (Dù sao tôi cũng chưa kiểm tra mã)
$the_field = field_view_field($entity_type, $entity, $field_name, $display = array(), $langcode = NULL);
// render the field
drupal_render($the_field);
cập nhật: trả lời trùng lặp, có thể chỉ cần xóa tôi. câu trả lời khác được đăng trong khi tôi đang viết câu trả lời này.
Nếu bạn sử dụng mô-đun Trình định dạng tùy chỉnh, đừng quên thêm tiền tố 'custom_formattftime' trước tên mashine của trình định dạng của bạn như sau:
$display = array('type' => 'custom_formatters_my_formatter');
Có vẻ như bạn cũng có thể chỉnh sửa tệp mẫu để điều chỉnh cách xuất này theo ngữ nghĩa:
1) Thiết lập một fomat ngày tùy chỉnh và đặt tên máy như "short_date_only" hoặc bất cứ điều gì. 2) Định cấu hình các tùy chọn hiển thị cho loại nội dung để sử dụng định dạng đó 3) Ghi đè mẫu trường vào một cái gì đó như trường - field_date_custom-content_type.tpl
$index
(tham số thứ ba của field_view_value ()) là $ delta. Trên một trường giá trị duy nhất này sẽ là 0. Vì vậy, Bạn có thể sử dụng$output = field_view_value('node', $node, 'field_foo', $fields[0]);
hoặc$output = field_view_value('node', $node, 'field_foo', $fields[$delta]);