형식을 포함하여 필드 값을 어떻게 렌더링합니까?


9

데이터베이스에서 필드 값과 형식을 읽습니다. 해당 값을 형식으로 어떻게 렌더링합니까?

답변:


36

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

$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]);
johirpro

0

API를 확인함으로써, 나는 당신이 이것을 찾고 있다고 생각합니다. (어쨌든 코드를 테스트하지 않았습니다)

$the_field = field_view_field($entity_type, $entity, $field_name, $display = array(), $langcode = NULL);

// render the field
drupal_render($the_field);

업데이트 : 중복 답변, 그냥 나를 삭제할 수 있습니다. 이 답변을 작성하는 동안 다른 답변이 게시되었습니다.


0

모듈 사용자 정의 포맷터 를 사용하는 경우 포맷터의 mashine 이름 앞에 다음과 같이 접두어 'custom_formatters_'를 추가하는 것을 잊지 마십시오.

$display = array('type' => 'custom_formatters_my_formatter');

0

템플릿 파일을 편집하여 의미 적으로 출력되는 방식을 조정할 수도 있습니다.

1) 사용자 정의 날짜 형식을 설정하고 "short_date_only"와 같은 이름을 지정하십시오. 2) 해당 형식을 사용하도록 컨텐츠 유형의 표시 옵션을 구성하십시오. 3) 필드 템플리트를 field--date_custom-content_type.tpl

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.