it-swarm-vi.com

Kiểm tra nếu một trường trống

Làm thế nào để bạn kiểm tra xem một trường có trống không, khi bạn có đối tượng nút $?.

Tôi thấy đây là giải pháp có thể:

$field = field_get_items('node', $node, 'field_post_image');

Tôi có thể kiểm tra ngay bây giờ:

CẬP NHẬT . Up! Điều này không đáng tin cậy, mặc dù tôi hứa rằng nó đã làm việc cho tôi ngày hôm qua.

isset($field);

nhưng tôi tự hỏi nếu có một cách tốt hơn.

Soi sáng cho tôi

17
corbacho

Nếu bạn đọc lên tài liệ hàm trả về FALSE nếu không có dữ liệu. isset() sẽ thực sự thất bại vì bạn đang gán FALSE cho biến để nó thực sự được đặt thành một cái gì đó. Cú pháp đúng sẽ là:

$field = field_get_items('node', $node, 'field_post_image');
if ($field) {
   //Do something with the field
}
else{
   //There are no results
}
30
Sam152

Bạn có thể sử dụng đoạn mã sau để xác minh xem trường có trống không.

$info = field_info_field($field_name);
$function = $info['module'] . '_field_is_empty';

if (function_exists($function)) {
  $value = field_get_items('node', $node, $field_name);
  $is_empty = $function($value[0], $info);
}

Mã này an toàn hơn, vì các trường khác nhau được coi là trống trong các điều kiện khác nhau. Xem, ví dụ, sự khác biệt giữa file_field_is_empty () , number_field_is_empty ()taxonomy_field_is_empty () : taxonomy_field_is_empty() kiểm tra thuộc tính tid của tham số $item, trong khi number_field_is_empty() kiểm tra thuộc tính value của cùng một tham số. Các trường tùy chỉnh có thể yêu cầu một điều kiện phức tạp hơn để được xác minh, để xem xét trường trống.

Mô tả cho hook_field_is_empty () được cung cấp trong tài liệu là mô tả sau:

Xác định những gì tạo thành một mục trống cho một loại trường.

8
kiamlaluno

Chúng tôi đã tìm thấy giá trị thô trong ($content['field_name']['#items'][0][value]), vì vậy bạn có thể xác định xem trường có trống hay không với biểu thức

(! trống ($ nội dung ['field_name'] ['# items'] [0] [value]))

ở đâu field_name khớp với tên của trường mong muốn.

2
eduardocs

Drupal 8

Nếu ai đó cần câu trả lời tương tự trong D8, đó là những gì tôi làm để kiểm tra lĩnh vực của mình:

if ($entity->hasField('field_event_date_start')
  && !$entity->get('field_event_date_start')->isEmpty()) {
  // Do something ...
}
1
Pauleau