필드가 비어 있는지 확인


18

$ node 객체가있을 때 필드가 비어 있는지 확인하는 방법?

가능한 해결책으로 이것을 찾았습니다.

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

나는 지금 확인할 수 있습니다 :

업데이트 .Ups! 비록 그것이 어제 나를 위해 일했다고 약속하지만 이것은 신뢰할 수는 없습니다.

isset($field);

그러나 더 좋은 방법이 있는지 궁금합니다.

나를 계몽하십시오

답변:


30

설명서 를 읽으면 FALSE데이터가 없으면 함수가 반환 됩니다. 변수에 isset()할당 FALSE되어 실제로 무언가로 설정되어 있기 때문에 실제로 실패 합니다. 올바른 구문은 다음과 같습니다.

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

이것이 최선의 방법 인 것 같습니다. 이 FALSE를 반환합니다 빈의 경우 모든 데이터가있는 경우, 그것은 숫자의 경우에는 FALSE로 $ 현장 평가하여 등, 0 필드 너무 걱정이없는, 배열을 반환합니다
corbacho

아무것도 설정되지 않은 경우 기본값을 반환했기 때문에 이것은 효과가 없었습니다.

감사합니다! 이것은 로그인 할 때 훌륭하게 작동했지만 로그 아웃하면 아무것도 표시되지 않습니다. 그 이유와 해결책이 있습니까?
Dan

안녕 댄 로그인해도 위의 코드에는 영향을 미치지 않습니다. 아마도 devel을 사용하여 변수를 디버깅하고 있고 anon 사용자에게는 "개발자 정보 액세스"가 없습니까?
Sam152

이것은 필드가 비어 있는지 확인하는 잘못된 방법입니다. 필드를 구현하는 모듈에 의해 정의 된 hook_field_is_empty를 호출하여 설명 된 방법을 사용해야합니다. kiamlaluno의 게시물을 참조하십시오.
lslinnet

8

다음 스 니펫을 사용하여 필드가 비어 있는지 확인할 수 있습니다.

$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);
}

다른 조건에서는 다른 필드가 비어있는 것으로 간주되므로이 코드가 더 안전합니다. 참조, 예를 들면, 차이 file_field_is_empty () , number_field_is_empty ()taxonomy_field_is_empty () : taxonomy_field_is_empty()체크 TID 의 속성 $item파라미터 반면 number_field_is_empty()체크 값이 동일한 파라미터의 속성. 필드를 비워 두려면 사용자 정의 필드에 더 복잡한 조건을 검증해야 할 수 있습니다.

에 대한 설명 hook_field_is_empty () 문서에 나와은 다음의 하나입니다 :

필드 유형에 빈 항목을 구성하는 항목을 정의하십시오.


이 답변에 감사하지만 hook_field_is_empty ()는 매우 멀리 가고있는 것 같습니다. 필드가 실제로 비어 있는지 알고 싶습니다. 예를 들어 number_field_is_empty는 0도 비어 있다고 간주합니다. 또한 필드가 다중 값인 경우이 기능을 직접 적용 할 수 없는지 테스트합니다.
corbacho

1
이것이 0을 포함하는 변수 또는 문자열 "0"을 전달할 때 empty ()가하는 것입니다. 필드가 비어있을 때 값을 사용하고있을 수 있으며 필드가 비어 있는지 확인하는 유일한 방법은 hook_field_is_empty ()를 호출하는 것입니다.
kiamlaluno

실수가 있습니다. $ function ($ value [0], $ info) 여야합니다. api.drupal.org/api/drupal/modules!field!field.api.php/function/…
volocuga

2

( $content['field_name']['#items'][0][value]) 에서 원시 값을 찾았 으므로 표현식을 사용하여 필드가 비어 있는지 여부를 확인할 수 있습니다.

(! empty ($ content [ 'field_name'] [ '# items'] [0] [값]))

여기서 field_name원하는 필드의 이름과 일치합니다.


아니요. "값"키는 db 열 이름 일뿐입니다. 필드 유형에 따라 다를 수 있습니다. 가장 좋은 방법은 위의 제안대로 hook_field_is_empty () (필요한)를 확인하십시오.
volocuga

1

드루팔 8

누군가가 D8에서 동일한 대답을 필요로한다면, 그것은 내 분야를 테스트하기 위해하는 것입니다.

if ($entity->hasField('field_event_date_start')
  && !$entity->get('field_event_date_start')->isEmpty()) {
  // Do something ...
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.