답변:
Field API의 작동 방식을 설명하는 데 많은 시간을 할애 할 수는 있지만 실제로는 데이터베이스를 직접 쿼리하는 대신 Field API를 사용하여 필드 컨텐츠를 직접 렌더링해야합니다. 필드에 추가 된 캡슐화와 추상화가 많이 있는데, 우회하면 구신을 깨울 것입니다.
필드 API를 사용하여 전체 형식의 필드를 원하고 레이블과 모든 값을 완성하려면 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);
필드에 한 항목의 서식이 지정된 값만 표시하려면 field_view_value()조금 더 관련이 있어야합니다 .
// 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);
당신이 필드 인스턴스에 지정된 기본값이 아닌 다른 포맷을 사용하려면 사용하여 통과 $display에 두 매개 변수를 field_view_field()나 field_view_value():
$display = array('type' => 'my_formatter');
$output = field_view_field('node', $node, 'field_foo', $display);
모듈 사용자 정의 포맷터 를 사용하는 경우 포맷터의 mashine 이름 앞에 다음과 같이 접두어 'custom_formatters_'를 추가하는 것을 잊지 마십시오.
$display = array('type' => 'custom_formatters_my_formatter');
$index합니다 (field_view_value ()의 세번째 파라미터) $ 델타이다. 단일 값 필드에이 0 그래서, 당신이 사용할 수있는 것$output = field_view_value('node', $node, 'field_foo', $fields[0]);또는$output = field_view_value('node', $node, 'field_foo', $fields[$delta]);